/*
 * File:        jquery.dataTables.min.js
 * Version:     1.9.2
 * Author:      Allan Jardine (www.sprymedia.co.uk)
 * Info:        www.datatables.net
 *
 * Copyright 2008-2012 Allan Jardine, all rights reserved.
 *
 * This source file is free software, under either the GPL v2 license or a
 * BSD style license, available at:
 *   http://datatables.net/license_gpl2
 *   http://datatables.net/license_bsd
 *
 * This source file is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
 */
(function(i, V, l, n) {
	var j = function(e) {
			function o(a, b) {
				var c = j.defaults.columns,
					d = a.aoColumns.length,
					c = i.extend({}, j.models.oColumn, c, {
						sSortingClass: a.oClasses.sSortable,
						sSortingClassJUI: a.oClasses.sSortJUI,
						nTh: b ? b : l.createElement("th"),
						sTitle: c.sTitle ? c.sTitle : b ? b.innerHTML : "",
						aDataSort: c.aDataSort ? c.aDataSort : [d],
						mDataProp: c.mDataProp ? c.oDefaults : d
					});
				a.aoColumns.push(c);
				if (a.aoPreSearchCols[d] === n || null === a.aoPreSearchCols[d]) a.aoPreSearchCols[d] = i.extend({}, j.models.oSearch);
				else if (c = a.aoPreSearchCols[d], c.bRegex === n && (c.bRegex = !0), c.bSmart === n && (c.bSmart = !0), c.bCaseInsensitive === n) c.bCaseInsensitive = !0;
				r(a, d, null)
			}

			function r(a, b, c) {
				b = a.aoColumns[b];
				c !== n && null !== c && (c.sType !== n && (b.sType = c.sType, b._bAutoType = !1), i.extend(b, c), p(b, c, "sWidth", "sWidthOrig"), c.iDataSort !== n && (b.aDataSort = [c.iDataSort]), p(b, c, "aDataSort"));
				b.fnGetData = W(b.mDataProp);
				b.fnSetData = ta(b.mDataProp);
				a.oFeatures.bSort || (b.bSortable = !1);
				!b.bSortable || -1 == i.inArray("asc", b.asSorting) && -1 == i.inArray("desc", b.asSorting) ? (b.sSortingClass = a.oClasses.sSortableNone, b.sSortingClassJUI = "") : b.bSortable || -1 == i.inArray("asc", b.asSorting) && -1 == i.inArray("desc", b.asSorting) ? (b.sSortingClass = a.oClasses.sSortable, b.sSortingClassJUI = a.oClasses.sSortJUI) : -1 != i.inArray("asc", b.asSorting) && -1 == i.inArray("desc", b.asSorting) ? (b.sSortingClass = a.oClasses.sSortableAsc, b.sSortingClassJUI = a.oClasses.sSortJUIAscAllowed) : -1 == i.inArray("asc", b.asSorting) && -1 != i.inArray("desc", b.asSorting) && (b.sSortingClass = a.oClasses.sSortableDesc, b.sSortingClassJUI = a.oClasses.sSortJUIDescAllowed)
			}

			function k(a) {
				if (!1 === a.oFeatures.bAutoWidth) return !1;
				ba(a);
				for (var b = 0, c = a.aoColumns.length; b < c; b++) a.aoColumns[b].nTh.style.width = a.aoColumns[b].sWidth
			}

			function G(a, b) {
				for (var c = -1, d = 0; d < a.aoColumns.length; d++) if (!0 === a.aoColumns[d].bVisible && c++, c == b) return d;
				return null
			}

			function t(a, b) {
				for (var c = -1, d = 0; d < a.aoColumns.length; d++) if (!0 === a.aoColumns[d].bVisible && c++, d == b) return !0 === a.aoColumns[d].bVisible ? c : null;
				return null
			}

			function v(a) {
				for (var b = 0, c = 0; c < a.aoColumns.length; c++)!0 === a.aoColumns[c].bVisible && b++;
				return b
			}

			function z(a) {
				for (var b = j.ext.aTypes, c = b.length, d = 0; d < c; d++) {
					var g = b[d](a);
					if (null !== g) return g
				}
				return "string"
			}

			function D(a, b) {
				for (var c = b.split(","), d = [], g = 0, f = a.aoColumns.length; g < f; g++) for (var h = 0; h < f; h++) if (a.aoColumns[g].sName == c[h]) {
					d.push(h);
					break
				}
				return d
			}

			function x(a) {
				for (var b = "", c = 0, d = a.aoColumns.length; c < d; c++) b += a.aoColumns[c].sName + ",";
				return b.length == d ? "" : b.slice(0, -1)
			}

			function J(a, b, c, d) {
				var g, f, h, e, s;
				if (b) for (g = b.length - 1; 0 <= g; g--) {
					var m = b[g].aTargets;
					i.isArray(m) || E(a, 1, "aTargets must be an array of targets, not a " + typeof m);
					f = 0;
					for (h = m.length; f < h; f++) if ("number" === typeof m[f] && 0 <= m[f]) {
						for (; a.aoColumns.length <= m[f];) o(a);
						d(m[f], b[g])
					} else if ("number" === typeof m[f] && 0 > m[f]) d(a.aoColumns.length + m[f], b[g]);
					else if ("string" === typeof m[f]) {
						e = 0;
						for (s = a.aoColumns.length; e < s; e++)("_all" == m[f] || i(a.aoColumns[e].nTh).hasClass(m[f])) && d(e, b[g])
					}
				}
				if (c) {
					g = 0;
					for (a = c.length; g < a; g++) d(g, c[g])
				}
			}

			function H(a, b) {
				var c;
				c = i.isArray(b) ? b.slice() : i.extend(!0, {}, b);
				var d = a.aoData.length,
					g = i.extend(!0, {}, j.models.oRow);
				g._aData = c;
				a.aoData.push(g);
				for (var f, g = 0, h = a.aoColumns.length; g < h; g++) c = a.aoColumns[g], "function" === typeof c.fnRender && c.bUseRendered && null !== c.mDataProp ? I(a, d, g, R(a, d, g)) : I(a, d, g, w(a, d, g)), c._bAutoType && "string" != c.sType && (f = w(a, d, g, "type"), null !== f && "" !== f && (f = z(f), null === c.sType ? c.sType = f : c.sType != f && "html" != c.sType && (c.sType = "string")));
				a.aiDisplayMaster.push(d);
				a.oFeatures.bDeferRender || ca(a, d);
				return d
			}

			function ua(a) {
				var b, c, d, g, f, h, e, s, m;
				if (a.bDeferLoading || null === a.sAjaxSource) {
					e = a.nTBody.childNodes;
					b = 0;
					for (c = e.length; b < c; b++) if ("TR" == e[b].nodeName.toUpperCase()) {
						s = a.aoData.length;
						e[b]._DT_RowIndex = s;
						a.aoData.push(i.extend(!0, {}, j.models.oRow, {
							nTr: e[b]
						}));
						a.aiDisplayMaster.push(s);
						h = e[b].childNodes;
						d = f = 0;
						for (g = h.length; d < g; d++) if (m = h[d].nodeName.toUpperCase(), "TD" == m || "TH" == m) I(a, s, f, i.trim(h[d].innerHTML)), f++
					}
				}
				e = S(a);
				h = [];
				b = 0;
				for (c = e.length; b < c; b++) {
					d = 0;
					for (g = e[b].childNodes.length; d < g; d++) f = e[b].childNodes[d], m = f.nodeName.toUpperCase(), ("TD" == m || "TH" == m) && h.push(f)
				}
				g = 0;
				for (e = a.aoColumns.length; g < e; g++) {
					m = a.aoColumns[g];
					null === m.sTitle && (m.sTitle = m.nTh.innerHTML);
					f = m._bAutoType;
					s = "function" === typeof m.fnRender;
					var o = null !== m.sClass,
						k = m.bVisible,
						n, r;
					if (f || s || o || !k) {
						b = 0;
						for (c = a.aoData.length; b < c; b++) d = a.aoData[b], n = h[b * e + g], f && "string" != m.sType && (r = w(a, b, g, "type"), "" !== r && (r = z(r), null === m.sType ? m.sType = r : m.sType != r && "html" != m.sType && (m.sType = "string"))), "function" === typeof m.mDataProp && (n.innerHTML = w(a, b, g, "display")), s && (r = R(a, b, g), n.innerHTML = r, m.bUseRendered && I(a, b, g, r)), o && (n.className += " " + m.sClass), k ? d._anHidden[g] = null : (d._anHidden[g] = n, n.parentNode.removeChild(n)), m.fnCreatedCell && m.fnCreatedCell.call(a.oInstance, n, w(a, b, g, "display"), d._aData, b, g)
					}
				}
				if (0 !== a.aoRowCreatedCallback.length) {
					b = 0;
					for (c = a.aoData.length; b < c; b++) d = a.aoData[b], C(a, "aoRowCreatedCallback", null, [d.nTr, d._aData, b])
				}
			}

			function K(a, b) {
				return b._DT_RowIndex !== n ? b._DT_RowIndex : null
			}

			function da(a, b, c) {
				for (var b = L(a, b), d = 0, a = a.aoColumns.length; d < a; d++) if (b[d] === c) return d;
				return -1
			}

			function X(a, b, c) {
				for (var d = [], g = 0, f = a.aoColumns.length; g < f; g++) d.push(w(a, b, g, c));
				return d
			}

			function w(a, b, c, d) {
				var g = a.aoColumns[c];
				if ((c = g.fnGetData(a.aoData[b]._aData, d)) === n) return a.iDrawError != a.iDraw && null === g.sDefaultContent && (E(a, 0, "Requested unknown parameter " + ("function" == typeof g.mDataProp ? "{mDataprop function}" : "'" + g.mDataProp + "'") + " from the data source for row " + b), a.iDrawError = a.iDraw), g.sDefaultContent;
				if (null === c && null !== g.sDefaultContent) c = g.sDefaultContent;
				else if ("function" === typeof c) return c();
				return "display" == d && null === c ? "" : c
			}

			function I(a, b, c, d) {
				a.aoColumns[c].fnSetData(a.aoData[b]._aData, d)
			}

			function W(a) {
				if (null === a) return function() {
					return null
				};
				if ("function" === typeof a) return function(b, d) {
					return a(b, d)
				};
				if ("string" === typeof a && -1 != a.indexOf(".")) {
					var b = a.split(".");
					return function(a) {
						for (var d = 0, g = b.length; d < g; d++) if (a = a[b[d]], a === n) return n;
						return a
					}
				}
				return function(b) {
					return b[a]
				}
			}

			function ta(a) {
				if (null === a) return function() {};
				if ("function" === typeof a) return function(b, d) {
					a(b, "set", d)
				};
				if ("string" === typeof a && -1 != a.indexOf(".")) {
					var b = a.split(".");
					return function(a, d) {
						for (var g = 0, f = b.length - 1; g < f; g++) a[b[g]] === n && (a[b[g]] = {}), a = a[b[g]];
						a[b[b.length - 1]] = d
					}
				}
				return function(b, d) {
					b[a] = d
				}
			}

			function Y(a) {
				for (var b = [], c = a.aoData.length, d = 0; d < c; d++) b.push(a.aoData[d]._aData);
				return b
			}

			function ea(a) {
				a.aoData.splice(0, a.aoData.length);
				a.aiDisplayMaster.splice(0, a.aiDisplayMaster.length);
				a.aiDisplay.splice(0, a.aiDisplay.length);
				A(a)
			}

			function fa(a, b) {
				for (var c = -1, d = 0, g = a.length; d < g; d++) a[d] == b ? c = d : a[d] > b && a[d]--; - 1 != c && a.splice(c, 1)
			}

			function R(a, b, c) {
				var d = a.aoColumns[c];
				return d.fnRender({
					iDataRow: b,
					iDataColumn: c,
					oSettings: a,
					aData: a.aoData[b]._aData,
					mDataProp: d.mDataProp
				}, w(a, b, c, "display"))
			}

			function ca(a, b) {
				var c = a.aoData[b],
					d;
				if (null === c.nTr) {
					c.nTr = l.createElement("tr");
					c.nTr._DT_RowIndex = b;
					c._aData.DT_RowId && (c.nTr.id = c._aData.DT_RowId);
					c._aData.DT_RowClass && i(c.nTr).addClass(c._aData.DT_RowClass);
					for (var g = 0, f = a.aoColumns.length; g < f; g++) {
						var h = a.aoColumns[g];
						d = l.createElement(h.sCellType);
						d.innerHTML = "function" === typeof h.fnRender && (!h.bUseRendered || null === h.mDataProp) ? R(a, b, g) : w(a, b, g, "display");
						null !== h.sClass && (d.className = h.sClass);
						h.bVisible ? (c.nTr.appendChild(d), c._anHidden[g] = null) : c._anHidden[g] = d;
						h.fnCreatedCell && h.fnCreatedCell.call(a.oInstance, d, w(a, b, g, "display"), c._aData, b, g)
					}
					C(a, "aoRowCreatedCallback", null, [c.nTr, c._aData, b])
				}
			}

			function va(a) {
				var b, c, d;
				if (0 !== a.nTHead.getElementsByTagName("th").length) {
					b = 0;
					for (d = a.aoColumns.length; b < d; b++) if (c = a.aoColumns[b].nTh, c.setAttribute("role", "columnheader"), a.aoColumns[b].bSortable && (c.setAttribute("tabindex", a.iTabIndex), c.setAttribute("aria-controls", a.sTableId)), null !== a.aoColumns[b].sClass && i(c).addClass(a.aoColumns[b].sClass), a.aoColumns[b].sTitle != c.innerHTML) c.innerHTML = a.aoColumns[b].sTitle
				} else {
					var g = l.createElement("tr");
					b = 0;
					for (d = a.aoColumns.length; b < d; b++) c = a.aoColumns[b].nTh, c.innerHTML = a.aoColumns[b].sTitle, c.setAttribute("tabindex", "0"), null !== a.aoColumns[b].sClass && i(c).addClass(a.aoColumns[b].sClass), g.appendChild(c);
					i(a.nTHead).html("")[0].appendChild(g);
					T(a.aoHeader, a.nTHead)
				}
				i(a.nTHead).children("tr").attr("role", "row");
				if (a.bJUI) {
					b = 0;
					for (d = a.aoColumns.length; b < d; b++) {
						c = a.aoColumns[b].nTh;
						g = l.createElement("div");
						g.className = a.oClasses.sSortJUIWrapper;
						i(c).contents().appendTo(g);
						var f = l.createElement("span");
						f.className = a.oClasses.sSortIcon;
						g.appendChild(f);
						c.appendChild(g)
					}
				}
				if (a.oFeatures.bSort) for (b = 0; b < a.aoColumns.length; b++)!1 !== a.aoColumns[b].bSortable ? ga(a, a.aoColumns[b].nTh, b) : i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);
				"" !== a.oClasses.sFooterTH && i(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);
				if (null !== a.nTFoot) {
					c = O(a, null, a.aoFooter);
					b = 0;
					for (d = a.aoColumns.length; b < d; b++) c[b] && (a.aoColumns[b].nTf = c[b], a.aoColumns[b].sClass && i(c[b]).addClass(a.aoColumns[b].sClass))
				}
			}

			function U(a, b, c) {
				var d, g, f, h = [],
					e = [],
					i = a.aoColumns.length,
					m;
				c === n && (c = !1);
				d = 0;
				for (g = b.length; d < g; d++) {
					h[d] = b[d].slice();
					h[d].nTr = b[d].nTr;
					for (f = i - 1; 0 <= f; f--)!a.aoColumns[f].bVisible && !c && h[d].splice(f, 1);
					e.push([])
				}
				d = 0;
				for (g = h.length; d < g; d++) {
					if (a = h[d].nTr) for (; f = a.firstChild;) a.removeChild(f);
					f = 0;
					for (b = h[d].length; f < b; f++) if (m = i = 1, e[d][f] === n) {
						a.appendChild(h[d][f].cell);
						for (e[d][f] = 1; h[d + i] !== n && h[d][f].cell == h[d + i][f].cell;) e[d + i][f] = 1, i++;
						for (; h[d][f + m] !== n && h[d][f].cell == h[d][f + m].cell;) {
							for (c = 0; c < i; c++) e[d + c][f + m] = 1;
							m++
						}
						h[d][f].cell.rowSpan = i;
						h[d][f].cell.colSpan = m
					}
				}
			}

			function y(a) {
				var b = C(a, "aoPreDrawCallback", "preDraw", [a]);
				if (-1 !== i.inArray(!1, b)) F(a, !1);
				else {
					var c, d, b = [],
						g = 0,
						f = a.asStripeClasses.length;
					c = a.aoOpenRows.length;
					a.bDrawing = !0;
					a.iInitDisplayStart !== n && -1 != a.iInitDisplayStart && (a._iDisplayStart = a.oFeatures.bServerSide ? a.iInitDisplayStart : a.iInitDisplayStart >= a.fnRecordsDisplay() ? 0 : a.iInitDisplayStart, a.iInitDisplayStart = -1, A(a));
					if (a.bDeferLoading) a.bDeferLoading = !1, a.iDraw++;
					else if (a.oFeatures.bServerSide) {
						if (!a.bDestroying && !wa(a)) return
					} else a.iDraw++;
					if (0 !== a.aiDisplay.length) {
						var h = a._iDisplayStart;
						d = a._iDisplayEnd;
						a.oFeatures.bServerSide && (h = 0, d = a.aoData.length);
						for (; h < d; h++) {
							var e = a.aoData[a.aiDisplay[h]];
							null === e.nTr && ca(a, a.aiDisplay[h]);
							var s = e.nTr;
							if (0 !== f) {
								var m = a.asStripeClasses[g % f];
								e._sRowStripe != m && (i(s).removeClass(e._sRowStripe).addClass(m), e._sRowStripe = m)
							}
							C(a, "aoRowCallback", null, [s, a.aoData[a.aiDisplay[h]]._aData, g, h]);
							b.push(s);
							g++;
							if (0 !== c) for (e = 0; e < c; e++) if (s == a.aoOpenRows[e].nParent) {
								b.push(a.aoOpenRows[e].nTr);
								break
							}
						}
					} else b[0] = l.createElement("tr"), a.asStripeClasses[0] && (b[0].className = a.asStripeClasses[0]), c = a.oLanguage, f = c.sZeroRecords, 1 == a.iDraw && null !== a.sAjaxSource && !a.oFeatures.bServerSide ? f = c.sLoadingRecords : c.sEmptyTable && 0 === a.fnRecordsTotal() && (f = c.sEmptyTable), c = l.createElement("td"), c.setAttribute("valign", "top"), c.colSpan = v(a), c.className = a.oClasses.sRowEmpty, c.innerHTML = ha(a, f), b[g].appendChild(c);
					C(a, "aoHeaderCallback", "header", [i(a.nTHead).children("tr")[0], Y(a), a._iDisplayStart, a.fnDisplayEnd(), a.aiDisplay]);
					C(a, "aoFooterCallback", "footer", [i(a.nTFoot).children("tr")[0], Y(a), a._iDisplayStart, a.fnDisplayEnd(), a.aiDisplay]);
					g = l.createDocumentFragment();
					c = l.createDocumentFragment();
					if (a.nTBody) {
						f = a.nTBody.parentNode;
						c.appendChild(a.nTBody);
						if (!a.oScroll.bInfinite || !a._bInitComplete || a.bSorted || a.bFiltered) for (; c = a.nTBody.firstChild;) a.nTBody.removeChild(c);
						c = 0;
						for (d = b.length; c < d; c++) g.appendChild(b[c]);
						a.nTBody.appendChild(g);
						null !== f && f.appendChild(a.nTBody)
					}
					C(a, "aoDrawCallback", "draw", [a]);
					a.bSorted = !1;
					a.bFiltered = !1;
					a.bDrawing = !1;
					a.oFeatures.bServerSide && (F(a, !1), a._bInitComplete || Z(a))
				}
			}

			function $(a) {
				a.oFeatures.bSort ? P(a, a.oPreviousSearch) : a.oFeatures.bFilter ? M(a, a.oPreviousSearch) : (A(a), y(a))
			}

			function xa(a) {
				var b = i("<div></div>")[0];
				a.nTable.parentNode.insertBefore(b, a.nTable);
				a.nTableWrapper = i('<div id="' + a.sTableId + '_wrapper" class="' + a.oClasses.sWrapper + '" role="grid"></div>')[0];
				a.nTableReinsertBefore = a.nTable.nextSibling;
				for (var c = a.nTableWrapper, d = a.sDom.split(""), g, f, h, e, s, m, o, k = 0; k < d.length; k++) {
					f = 0;
					h = d[k];
					if ("<" == h) {
						e = i("<div></div>")[0];
						s = d[k + 1];
						if ("'" == s || '"' == s) {
							m = "";
							for (o = 2; d[k + o] != s;) m += d[k + o], o++;
							"H" == m ? m = a.oClasses.sJUIHeader : "F" == m && (m = a.oClasses.sJUIFooter); - 1 != m.indexOf(".") ? (s = m.split("."), e.id = s[0].substr(1, s[0].length - 1), e.className = s[1]) : "#" == m.charAt(0) ? e.id = m.substr(1, m.length - 1) : e.className = m;
							k += o
						}
						c.appendChild(e);
						c = e
					} else if (">" == h) c = c.parentNode;
					else if ("l" == h && a.oFeatures.bPaginate && a.oFeatures.bLengthChange) g = ya(a), f = 1;
					else if ("f" == h && a.oFeatures.bFilter) g = za(a), f = 1;
					else if ("r" == h && a.oFeatures.bProcessing) g = Aa(a), f = 1;
					else if ("t" == h) g = Ba(a), f = 1;
					else if ("i" == h && a.oFeatures.bInfo) g = Ca(a), f = 1;
					else if ("p" == h && a.oFeatures.bPaginate) g = Da(a), f = 1;
					else if (0 !== j.ext.aoFeatures.length) {
						e = j.ext.aoFeatures;
						o = 0;
						for (s = e.length; o < s; o++) if (h == e[o].cFeature) {
							(g = e[o].fnInit(a)) && (f = 1);
							break
						}
					}
					1 == f && null !== g && ("object" !== typeof a.aanFeatures[h] && (a.aanFeatures[h] = []), a.aanFeatures[h].push(g), c.appendChild(g))
				}
				b.parentNode.replaceChild(a.nTableWrapper, b)
			}

			function T(a, b) {
				var c = i(b).children("tr"),
					d, g, f, h, e, s, m, j;
				a.splice(0, a.length);
				g = 0;
				for (s = c.length; g < s; g++) a.push([]);
				g = 0;
				for (s = c.length; g < s; g++) {
					f = 0;
					for (m = c[g].childNodes.length; f < m; f++) if (d = c[g].childNodes[f], "TD" == d.nodeName.toUpperCase() || "TH" == d.nodeName.toUpperCase()) {
						var o = 1 * d.getAttribute("colspan"),
							k = 1 * d.getAttribute("rowspan"),
							o = !o || 0 === o || 1 === o ? 1 : o,
							k = !k || 0 === k || 1 === k ? 1 : k;
						for (h = 0; a[g][h];) h++;
						j = h;
						for (e = 0; e < o; e++) for (h = 0; h < k; h++) a[g + h][j + e] = {
							cell: d,
							unique: 1 == o ? !0 : !1
						}, a[g + h].nTr = c[g]
					}
				}
			}

			function O(a, b, c) {
				var d = [];
				c || (c = a.aoHeader, b && (c = [], T(c, b)));
				for (var b = 0, g = c.length; b < g; b++) for (var f = 0, h = c[b].length; f < h; f++) if (c[b][f].unique && (!d[f] || !a.bSortCellsTop)) d[f] = c[b][f].cell;
				return d
			}

			function wa(a) {
				if (a.bAjaxDataGet) {
					a.iDraw++;
					F(a, !0);
					var b = Ea(a);
					ia(a, b);
					a.fnServerData.call(a.oInstance, a.sAjaxSource, b, function(b) {
						Fa(a, b)
					}, a);
					return !1
				}
				return !0
			}

			function Ea(a) {
				var b = a.aoColumns.length,
					c = [],
					d, g, f, h;
				c.push({
					name: "sEcho",
					value: a.iDraw
				});
				c.push({
					name: "iColumns",
					value: b
				});
				c.push({
					name: "sColumns",
					value: x(a)
				});
				c.push({
					name: "iDisplayStart",
					value: a._iDisplayStart
				});
				c.push({
					name: "iDisplayLength",
					value: !1 !== a.oFeatures.bPaginate ? a._iDisplayLength : -1
				});
				for (f = 0; f < b; f++) d = a.aoColumns[f].mDataProp, c.push({
					name: "mDataProp_" + f,
					value: "function" === typeof d ? "function" : d
				});
				if (!1 !== a.oFeatures.bFilter) {
					c.push({
						name: "sSearch",
						value: a.oPreviousSearch.sSearch
					});
					c.push({
						name: "bRegex",
						value: a.oPreviousSearch.bRegex
					});
					for (f = 0; f < b; f++) c.push({
						name: "sSearch_" + f,
						value: a.aoPreSearchCols[f].sSearch
					}), c.push({
						name: "bRegex_" + f,
						value: a.aoPreSearchCols[f].bRegex
					}), c.push({
						name: "bSearchable_" + f,
						value: a.aoColumns[f].bSearchable
					})
				}
				if (!1 !== a.oFeatures.bSort) {
					var e = 0;
					d = null !== a.aaSortingFixed ? a.aaSortingFixed.concat(a.aaSorting) : a.aaSorting.slice();
					for (f = 0; f < d.length; f++) {
						g = a.aoColumns[d[f][0]].aDataSort;
						for (h = 0; h < g.length; h++) c.push({
							name: "iSortCol_" + e,
							value: g[h]
						}), c.push({
							name: "sSortDir_" + e,
							value: d[f][1]
						}), e++
					}
					c.push({
						name: "iSortingCols",
						value: e
					});
					for (f = 0; f < b; f++) c.push({
						name: "bSortable_" + f,
						value: a.aoColumns[f].bSortable
					})
				}
				return c
			}

			function ia(a, b) {
				C(a, "aoServerParams", "serverParams", [b])
			}

			function Fa(a, b) {
				if (b.sEcho !== n) {
					if (1 * b.sEcho < a.iDraw) return;
					a.iDraw = 1 * b.sEcho
				}(!a.oScroll.bInfinite || a.oScroll.bInfinite && (a.bSorted || a.bFiltered)) && ea(a);
				a._iRecordsTotal = parseInt(b.iTotalRecords, 10);
				a._iRecordsDisplay = parseInt(b.iTotalDisplayRecords, 10);
				var c = x(a),
					c = b.sColumns !== n && "" !== c && b.sColumns != c,
					d;
				c && (d = D(a, b.sColumns));
				for (var g = W(a.sAjaxDataProp)(b), f = 0, h = g.length; f < h; f++) if (c) {
					for (var e = [], i = 0, m = a.aoColumns.length; i < m; i++) e.push(g[f][d[i]]);
					H(a, e)
				} else H(a, g[f]);
				a.aiDisplay = a.aiDisplayMaster.slice();
				a.bAjaxDataGet = !1;
				y(a);
				a.bAjaxDataGet = !0;
				F(a, !1)
			}

			function za(a) {
				var b = a.oPreviousSearch,
					c = a.oLanguage.sSearch,
					c = -1 !== c.indexOf("_INPUT_") ? c.replace("_INPUT_", '<input type="text" />') : "" === c ? '<input type="text" />' : c + ' <input type="text" />',
					d = l.createElement("div");
				d.className = a.oClasses.sFilter;
				d.innerHTML = "<label>" + c + "</label>";
				a.aanFeatures.f || (d.id = a.sTableId + "_filter");
				c = i('input[type="text"]', d);
				d._DT_Input = c[0];
				c.val(b.sSearch.replace('"', "&quot;"));
				c.bind("keyup.DT", function() {
					for (var c = a.aanFeatures.f, d = this.value === "" ? "" : this.value, h = 0, e = c.length; h < e; h++) c[h] != i(this).parents("div.dataTables_filter")[0] && i(c[h]._DT_Input).val(d);
					d != b.sSearch && M(a, {
						sSearch: d,
						bRegex: b.bRegex,
						bSmart: b.bSmart,
						bCaseInsensitive: b.bCaseInsensitive
					})
				});
				c.attr("aria-controls", a.sTableId).bind("keypress.DT", function(a) {
					if (a.keyCode == 13) return false
				});
				return d
			}

			function M(a, b, c) {
				var d = a.oPreviousSearch,
					g = a.aoPreSearchCols,
					f = function(a) {
						d.sSearch = a.sSearch;
						d.bRegex = a.bRegex;
						d.bSmart = a.bSmart;
						d.bCaseInsensitive = a.bCaseInsensitive
					};
				if (a.oFeatures.bServerSide) f(b);
				else {
					Ga(a, b.sSearch, c, b.bRegex, b.bSmart, b.bCaseInsensitive);
					f(b);
					for (b = 0; b < a.aoPreSearchCols.length; b++) Ha(a, g[b].sSearch, b, g[b].bRegex, g[b].bSmart, g[b].bCaseInsensitive);
					Ia(a)
				}
				a.bFiltered = !0;
				i(a.oInstance).trigger("filter", a);
				a._iDisplayStart = 0;
				A(a);
				y(a);
				ja(a, 0)
			}

			function Ia(a) {
				for (var b = j.ext.afnFiltering, c = 0, d = b.length; c < d; c++) for (var g = 0, f = 0, h = a.aiDisplay.length; f < h; f++) {
					var e = a.aiDisplay[f - g];
					b[c](a, X(a, e, "filter"), e) || (a.aiDisplay.splice(f - g, 1), g++)
				}
			}

			function Ha(a, b, c, d, g, f) {
				if ("" !== b) for (var h = 0, b = ka(b, d, g, f), d = a.aiDisplay.length - 1; 0 <= d; d--) g = la(w(a, a.aiDisplay[d], c, "filter"), a.aoColumns[c].sType), b.test(g) || (a.aiDisplay.splice(d, 1), h++)
			}

			function Ga(a, b, c, d, g, f) {
				d = ka(b, d, g, f);
				g = a.oPreviousSearch;
				c || (c = 0);
				0 !== j.ext.afnFiltering.length && (c = 1);
				if (0 >= b.length) a.aiDisplay.splice(0, a.aiDisplay.length), a.aiDisplay = a.aiDisplayMaster.slice();
				else if (a.aiDisplay.length == a.aiDisplayMaster.length || g.sSearch.length > b.length || 1 == c || 0 !== b.indexOf(g.sSearch)) {
					a.aiDisplay.splice(0, a.aiDisplay.length);
					ja(a, 1);
					for (b = 0; b < a.aiDisplayMaster.length; b++) d.test(a.asDataSearch[b]) && a.aiDisplay.push(a.aiDisplayMaster[b])
				} else for (b = c = 0; b < a.asDataSearch.length; b++) d.test(a.asDataSearch[b]) || (a.aiDisplay.splice(b - c, 1), c++)
			}

			function ja(a, b) {
				if (!a.oFeatures.bServerSide) {
					a.asDataSearch.splice(0, a.asDataSearch.length);
					for (var c = b && 1 === b ? a.aiDisplayMaster : a.aiDisplay, d = 0, g = c.length; d < g; d++) a.asDataSearch[d] = ma(a, X(a, c[d], "filter"))
				}
			}

			function ma(a, b) {
				var c = "";
				a.__nTmpFilter === n && (a.__nTmpFilter = l.createElement("div"));
				for (var d = a.__nTmpFilter, g = 0, f = a.aoColumns.length; g < f; g++) a.aoColumns[g].bSearchable && (c += la(b[g], a.aoColumns[g].sType) + "  "); - 1 !== c.indexOf("&") && (d.innerHTML = c, c = d.textContent ? d.textContent : d.innerText, c = c.replace(/\n/g, " ").replace(/\r/g, ""));
				return c
			}

			function ka(a, b, c, d) {
				if (c) return a = b ? a.split(" ") : na(a).split(" "), a = "^(?=.*?" + a.join(")(?=.*?") + ").*$", RegExp(a, d ? "i" : "");
				a = b ? a : na(a);
				return RegExp(a, d ? "i" : "")
			}

			function la(a, b) {
				return "function" === typeof j.ext.ofnSearch[b] ? j.ext.ofnSearch[b](a) : null === a ? "" : "html" == b ? a.replace(/[\r\n]/g, " ").replace(/<.*?>/g, "") : "string" === typeof a ? a.replace(/[\r\n]/g, " ") : a
			}

			function na(a) {
				return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)", "g"), "\\$1")
			}

			function Ca(a) {
				var b = l.createElement("div");
				b.className = a.oClasses.sInfo;
				a.aanFeatures.i || (a.aoDrawCallback.push({
					fn: Ja,
					sName: "information"
				}), b.id = a.sTableId + "_info");
				a.nTable.setAttribute("aria-describedby", a.sTableId + "_info");
				return b
			}

			function Ja(a) {
				if (a.oFeatures.bInfo && 0 !== a.aanFeatures.i.length) {
					var b = a.oLanguage,
						c = a._iDisplayStart + 1,
						d = a.fnDisplayEnd(),
						g = a.fnRecordsTotal(),
						f = a.fnRecordsDisplay(),
						h;
					h = 0 === f && f == g ? b.sInfoEmpty : 0 === f ? b.sInfoEmpty + " " + b.sInfoFiltered : f == g ? b.sInfo : b.sInfo + " " + b.sInfoFiltered;
					h += b.sInfoPostFix;
					h = ha(a, h);
					null !== b.fnInfoCallback && (h = b.fnInfoCallback.call(a.oInstance, a, c, d, g, f, h));
					a = a.aanFeatures.i;
					b = 0;
					for (c = a.length; b < c; b++) i(a[b]).html(h)
				}
			}

			function ha(a, b) {
				var c = a.fnFormatNumber(a._iDisplayStart + 1),
					d = a.fnDisplayEnd(),
					d = a.fnFormatNumber(d),
					g = a.fnRecordsDisplay(),
					g = a.fnFormatNumber(g),
					f = a.fnRecordsTotal(),
					f = a.fnFormatNumber(f);
				a.oScroll.bInfinite && (c = a.fnFormatNumber(1));
				return b.replace("_START_", c).replace("_END_", d).replace("_TOTAL_", g).replace("_MAX_", f)
			}

			function aa(a) {
				var b, c, d = a.iInitDisplayStart;
				if (!1 === a.bInitialised) setTimeout(function() {
					aa(a)
				}, 200);
				else {
					xa(a);
					va(a);
					U(a, a.aoHeader);
					a.nTFoot && U(a, a.aoFooter);
					F(a, !0);
					a.oFeatures.bAutoWidth && ba(a);
					b = 0;
					for (c = a.aoColumns.length; b < c; b++) null !== a.aoColumns[b].sWidth && (a.aoColumns[b].nTh.style.width = q(a.aoColumns[b].sWidth));
					a.oFeatures.bSort ? P(a) : a.oFeatures.bFilter ? M(a, a.oPreviousSearch) : (a.aiDisplay = a.aiDisplayMaster.slice(), A(a), y(a));
					null !== a.sAjaxSource && !a.oFeatures.bServerSide ? (c = [], ia(a, c), a.fnServerData.call(a.oInstance, a.sAjaxSource, c, function(c) {
						var f = a.sAjaxDataProp !== "" ? W(a.sAjaxDataProp)(c) : c;
						for (b = 0; b < f.length; b++) H(a, f[b]);
						a.iInitDisplayStart = d;
						if (a.oFeatures.bSort) P(a);
						else {
							a.aiDisplay = a.aiDisplayMaster.slice();
							A(a);
							y(a)
						}
						F(a, false);
						Z(a, c)
					}, a)) : a.oFeatures.bServerSide || (F(a, !1), Z(a))
				}
			}

			function Z(a, b) {
				a._bInitComplete = !0;
				C(a, "aoInitComplete", "init", [a, b])
			}

			function oa(a) {
				var b = j.defaults.oLanguage;
				!a.sEmptyTable && (a.sZeroRecords && "No data available in table" === b.sEmptyTable) && p(a, a, "sZeroRecords", "sEmptyTable");
				!a.sLoadingRecords && (a.sZeroRecords && "Loading..." === b.sLoadingRecords) && p(a, a, "sZeroRecords", "sLoadingRecords")
			}

			function ya(a) {
				if (a.oScroll.bInfinite) return null;
				var b = '<select size="1" ' + ('name="' + a.sTableId + '_length"') + ">",
					c, d, g = a.aLengthMenu;
				if (2 == g.length && "object" === typeof g[0] && "object" === typeof g[1]) {
					c = 0;
					for (d = g[0].length; c < d; c++) b += '<option value="' + g[0][c] + '">' + g[1][c] + "</option>"
				} else {
					c = 0;
					for (d = g.length; c < d; c++) b += '<option value="' + g[c] + '">' + g[c] + "</option>"
				}
				b += "</select>";
				g = l.createElement("div");
				a.aanFeatures.l || (g.id = a.sTableId + "_length");
				g.className = a.oClasses.sLength;
				g.innerHTML = "<label>" + a.oLanguage.sLengthMenu.replace("_MENU_", b) + "</label>";
				i('select option[value="' + a._iDisplayLength + '"]', g).attr("selected", !0);
				i("select", g).bind("change.DT", function() {
					var b = i(this).val(),
						g = a.aanFeatures.l;
					c = 0;
					for (d = g.length; c < d; c++) g[c] != this.parentNode && i("select", g[c]).val(b);
					a._iDisplayLength = parseInt(b, 10);
					A(a);
					if (a.fnDisplayEnd() == a.fnRecordsDisplay()) {
						a._iDisplayStart = a.fnDisplayEnd() - a._iDisplayLength;
						if (a._iDisplayStart < 0) a._iDisplayStart = 0
					}
					if (a._iDisplayLength == -1) a._iDisplayStart = 0;
					y(a)
				});
				i("select", g).attr("aria-controls", a.sTableId);
				return g
			}

			function A(a) {
				a._iDisplayEnd = !1 === a.oFeatures.bPaginate ? a.aiDisplay.length : a._iDisplayStart + a._iDisplayLength > a.aiDisplay.length || -1 == a._iDisplayLength ? a.aiDisplay.length : a._iDisplayStart + a._iDisplayLength
			}

			function Da(a) {
				if (a.oScroll.bInfinite) return null;
				var b = l.createElement("div");
				b.className = a.oClasses.sPaging + a.sPaginationType;
				j.ext.oPagination[a.sPaginationType].fnInit(a, b, function(a) {
					A(a);
					y(a)
				});
				a.aanFeatures.p || a.aoDrawCallback.push({
					fn: function(a) {
						j.ext.oPagination[a.sPaginationType].fnUpdate(a, function(a) {
							A(a);
							y(a)
						})
					},
					sName: "pagination"
				});
				return b
			}

			function pa(a, b) {
				var c = a._iDisplayStart;
				if ("number" === typeof b) a._iDisplayStart = b * a._iDisplayLength, a._iDisplayStart > a.fnRecordsDisplay() && (a._iDisplayStart = 0);
				else if ("first" == b) a._iDisplayStart = 0;
				else if ("previous" == b) a._iDisplayStart = 0 <= a._iDisplayLength ? a._iDisplayStart - a._iDisplayLength : 0, 0 > a._iDisplayStart && (a._iDisplayStart = 0);
				else if ("next" == b) 0 <= a._iDisplayLength ? a._iDisplayStart + a._iDisplayLength < a.fnRecordsDisplay() && (a._iDisplayStart += a._iDisplayLength) : a._iDisplayStart = 0;
				else if ("last" == b) if (0 <= a._iDisplayLength) {
					var d = parseInt((a.fnRecordsDisplay() - 1) / a._iDisplayLength, 10) + 1;
					a._iDisplayStart = (d - 1) * a._iDisplayLength
				} else a._iDisplayStart = 0;
				else E(a, 0, "Unknown paging action: " + b);
				i(a.oInstance).trigger("page", a);
				return c != a._iDisplayStart
			}

			function Aa(a) {
				var b = l.createElement("div");
				a.aanFeatures.r || (b.id = a.sTableId + "_processing");
				b.innerHTML = a.oLanguage.sProcessing;
				b.className = a.oClasses.sProcessing;
				a.nTable.parentNode.insertBefore(b, a.nTable);
				return b
			}

			function F(a, b) {
				if (a.oFeatures.bProcessing) for (var c = a.aanFeatures.r, d = 0, g = c.length; d < g; d++) c[d].style.visibility = b ? "visible" : "hidden";
				i(a.oInstance).trigger("processing", [a, b])
			}

			function Ba(a) {
				if ("" === a.oScroll.sX && "" === a.oScroll.sY) return a.nTable;
				var b = l.createElement("div"),
					c = l.createElement("div"),
					d = l.createElement("div"),
					g = l.createElement("div"),
					f = l.createElement("div"),
					h = l.createElement("div"),
					e = a.nTable.cloneNode(!1),
					j = a.nTable.cloneNode(!1),
					m = a.nTable.getElementsByTagName("thead")[0],
					o = 0 === a.nTable.getElementsByTagName("tfoot").length ? null : a.nTable.getElementsByTagName("tfoot")[0],
					k = a.oClasses;
				c.appendChild(d);
				f.appendChild(h);
				g.appendChild(a.nTable);
				b.appendChild(c);
				b.appendChild(g);
				d.appendChild(e);
				e.appendChild(m);
				null !== o && (b.appendChild(f), h.appendChild(j), j.appendChild(o));
				b.className = k.sScrollWrapper;
				c.className = k.sScrollHead;
				d.className = k.sScrollHeadInner;
				g.className = k.sScrollBody;
				f.className = k.sScrollFoot;
				h.className = k.sScrollFootInner;
				a.oScroll.bAutoCss && (c.style.overflow = "hidden", c.style.position = "relative", f.style.overflow = "hidden", g.style.overflow = "auto");
				c.style.border = "0";
				c.style.width = "100%";
				f.style.border = "0";
				d.style.width = "" !== a.oScroll.sXInner ? a.oScroll.sXInner : "100%";
				e.removeAttribute("id");
				e.style.marginLeft = "0";
				a.nTable.style.marginLeft = "0";
				null !== o && (j.removeAttribute("id"), j.style.marginLeft = "0");
				d = i(a.nTable).children("caption");
				0 < d.length && (d = d[0], "top" === d._captionSide ? e.appendChild(d) : "bottom" === d._captionSide && o && j.appendChild(d));
				"" !== a.oScroll.sX && (c.style.width = q(a.oScroll.sX), g.style.width = q(a.oScroll.sX), null !== o && (f.style.width = q(a.oScroll.sX)), i(g).scroll(function() {
					c.scrollLeft = this.scrollLeft;
					if (o !== null) f.scrollLeft = this.scrollLeft
				}));
				"" !== a.oScroll.sY && (g.style.height = q(a.oScroll.sY));
				a.aoDrawCallback.push({
					fn: Ka,
					sName: "scrolling"
				});
				a.oScroll.bInfinite && i(g).scroll(function() {
					if (!a.bDrawing && i(this).scrollTop() !== 0 && i(this).scrollTop() + i(this).height() > i(a.nTable).height() - a.oScroll.iLoadGap && a.fnDisplayEnd() < a.fnRecordsDisplay()) {
						pa(a, "next");
						A(a);
						y(a)
					}
				});
				a.nScrollHead = c;
				a.nScrollFoot = f;
				return b
			}

			function Ka(a) {
				var b = a.nScrollHead.getElementsByTagName("div")[0],
					c = b.getElementsByTagName("table")[0],
					d = a.nTable.parentNode,
					g, f, h, e, j, m, o, k, n = [],
					r = null !== a.nTFoot ? a.nScrollFoot.getElementsByTagName("div")[0] : null,
					p = null !== a.nTFoot ? r.getElementsByTagName("table")[0] : null,
					l = i.browser.msie && 7 >= i.browser.version;
				i(a.nTable).children("thead, tfoot").remove();
				h = i(a.nTHead).clone()[0];
				a.nTable.insertBefore(h, a.nTable.childNodes[0]);
				null !== a.nTFoot && (j = i(a.nTFoot).clone()[0], a.nTable.insertBefore(j, a.nTable.childNodes[1]));
				"" === a.oScroll.sX && (d.style.width = "100%", b.parentNode.style.width = "100%");
				var t = O(a, h);
				g = 0;
				for (f = t.length; g < f; g++) o = G(a, g), t[g].style.width = a.aoColumns[o].sWidth;
				null !== a.nTFoot && N(function(a) {
					a.style.width = ""
				}, j.getElementsByTagName("tr"));
				a.oScroll.bCollapse && "" !== a.oScroll.sY && (d.style.height = d.offsetHeight + a.nTHead.offsetHeight + "px");
				g = i(a.nTable).outerWidth();
				if ("" === a.oScroll.sX) {
					if (a.nTable.style.width = "100%", l && (i("tbody", d).height() > d.offsetHeight || "scroll" == i(d).css("overflow-y"))) a.nTable.style.width = q(i(a.nTable).outerWidth() - a.oScroll.iBarWidth)
				} else "" !== a.oScroll.sXInner ? a.nTable.style.width = q(a.oScroll.sXInner) : g == i(d).width() && i(d).height() < i(a.nTable).height() ? (a.nTable.style.width = q(g - a.oScroll.iBarWidth), i(a.nTable).outerWidth() > g - a.oScroll.iBarWidth && (a.nTable.style.width = q(g))) : a.nTable.style.width = q(g);
				g = i(a.nTable).outerWidth();
				f = a.nTHead.getElementsByTagName("tr");
				h = h.getElementsByTagName("tr");
				N(function(a, b) {
					m = a.style;
					m.paddingTop = "0";
					m.paddingBottom = "0";
					m.borderTopWidth = "0";
					m.borderBottomWidth = "0";
					m.height = 0;
					k = i(a).width();
					b.style.width = q(k);
					n.push(k)
				}, h, f);
				i(h).height(0);
				null !== a.nTFoot && (e = j.getElementsByTagName("tr"), j = a.nTFoot.getElementsByTagName("tr"), N(function(a, b) {
					m = a.style;
					m.paddingTop = "0";
					m.paddingBottom = "0";
					m.borderTopWidth = "0";
					m.borderBottomWidth = "0";
					m.height = 0;
					k = i(a).width();
					b.style.width = q(k);
					n.push(k)
				}, e, j), i(e).height(0));
				N(function(a) {
					a.innerHTML = "";
					a.style.width = q(n.shift())
				}, h);
				null !== a.nTFoot && N(function(a) {
					a.innerHTML = "";
					a.style.width = q(n.shift())
				}, e);
				if (i(a.nTable).outerWidth() < g) {
					e = d.scrollHeight > d.offsetHeight || "scroll" == i(d).css("overflow-y") ? g + a.oScroll.iBarWidth : g;
					if (l && (d.scrollHeight > d.offsetHeight || "scroll" == i(d).css("overflow-y"))) a.nTable.style.width = q(e - a.oScroll.iBarWidth);
					d.style.width = q(e);
					b.parentNode.style.width = q(e);
					null !== a.nTFoot && (r.parentNode.style.width = q(e));
					"" === a.oScroll.sX ? E(a, 1, "The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width.") : "" !== a.oScroll.sXInner && E(a, 1, "The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")
				} else d.style.width = q("100%"), b.parentNode.style.width = q("100%"), null !== a.nTFoot && (r.parentNode.style.width = q("100%"));
				"" === a.oScroll.sY && l && (d.style.height = q(a.nTable.offsetHeight + a.oScroll.iBarWidth));
				"" !== a.oScroll.sY && a.oScroll.bCollapse && (d.style.height = q(a.oScroll.sY), l = "" !== a.oScroll.sX && a.nTable.offsetWidth > d.offsetWidth ? a.oScroll.iBarWidth : 0, a.nTable.offsetHeight < d.offsetHeight && (d.style.height = q(a.nTable.offsetHeight + l)));
				l = i(a.nTable).outerWidth();
				c.style.width = q(l);
				b.style.width = q(l);
				c = i(a.nTable).height() > d.clientHeight || "scroll" == i(d).css("overflow-y");
				b.style.paddingRight = c ? a.oScroll.iBarWidth + "px" : "0px";
				null !== a.nTFoot && (p.style.width = q(l), r.style.width = q(l), r.style.paddingRight = c ? a.oScroll.iBarWidth + "px" : "0px");
				i(d).scroll();
				if (a.bSorted || a.bFiltered) d.scrollTop = 0
			}

			function N(a, b, c) {
				for (var d = 0, g = b.length; d < g; d++) for (var f = 0, h = b[d].childNodes.length; f < h; f++) 1 == b[d].childNodes[f].nodeType && (c ? a(b[d].childNodes[f], c[d].childNodes[f]) : a(b[d].childNodes[f]))
			}

			function La(a, b) {
				if (!a || null === a || "" === a) return 0;
				b || (b = l.getElementsByTagName("body")[0]);
				var c, d = l.createElement("div");
				d.style.width = q(a);
				b.appendChild(d);
				c = d.offsetWidth;
				b.removeChild(d);
				return c
			}

			function ba(a) {
				var b = 0,
					c, d = 0,
					g = a.aoColumns.length,
					f, h = i("th", a.nTHead),
					e = a.nTable.getAttribute("width");
				for (f = 0; f < g; f++) a.aoColumns[f].bVisible && (d++, null !== a.aoColumns[f].sWidth && (c = La(a.aoColumns[f].sWidthOrig, a.nTable.parentNode), null !== c && (a.aoColumns[f].sWidth = q(c)), b++));
				if (g == h.length && 0 === b && d == g && "" === a.oScroll.sX && "" === a.oScroll.sY) for (f = 0; f < a.aoColumns.length; f++) c = i(h[f]).width(), null !== c && (a.aoColumns[f].sWidth = q(c));
				else {
					b = a.nTable.cloneNode(!1);
					f = a.nTHead.cloneNode(!0);
					d = l.createElement("tbody");
					c = l.createElement("tr");
					b.removeAttribute("id");
					b.appendChild(f);
					null !== a.nTFoot && (b.appendChild(a.nTFoot.cloneNode(!0)), N(function(a) {
						a.style.width = ""
					}, b.getElementsByTagName("tr")));
					b.appendChild(d);
					d.appendChild(c);
					d = i("thead th", b);
					0 === d.length && (d = i("tbody tr:eq(0)>td", b));
					h = O(a, f);
					for (f = d = 0; f < g; f++) {
						var j = a.aoColumns[f];
						j.bVisible && null !== j.sWidthOrig && "" !== j.sWidthOrig ? h[f - d].style.width = q(j.sWidthOrig) : j.bVisible ? h[f - d].style.width = "" : d++
					}
					for (f = 0; f < g; f++) a.aoColumns[f].bVisible && (d = Ma(a, f), null !== d && (d = d.cloneNode(!0), "" !== a.aoColumns[f].sContentPadding && (d.innerHTML += a.aoColumns[f].sContentPadding), c.appendChild(d)));
					g = a.nTable.parentNode;
					g.appendChild(b);
					"" !== a.oScroll.sX && "" !== a.oScroll.sXInner ? b.style.width = q(a.oScroll.sXInner) : "" !== a.oScroll.sX ? (b.style.width = "", i(b).width() < g.offsetWidth && (b.style.width = q(g.offsetWidth))) : "" !== a.oScroll.sY ? b.style.width = q(g.offsetWidth) : e && (b.style.width = q(e));
					b.style.visibility = "hidden";
					Na(a, b);
					g = i("tbody tr:eq(0)", b).children();
					0 === g.length && (g = O(a, i("thead", b)[0]));
					if ("" !== a.oScroll.sX) {
						for (f = d = c = 0; f < a.aoColumns.length; f++) a.aoColumns[f].bVisible && (c = null === a.aoColumns[f].sWidthOrig ? c + i(g[d]).outerWidth() : c + (parseInt(a.aoColumns[f].sWidth.replace("px", ""), 10) + (i(g[d]).outerWidth() - i(g[d]).width())), d++);
						b.style.width = q(c);
						a.nTable.style.width = q(c)
					}
					for (f = d = 0; f < a.aoColumns.length; f++) a.aoColumns[f].bVisible && (c = i(g[d]).width(), null !== c && 0 < c && (a.aoColumns[f].sWidth = q(c)), d++);
					g = i(b).css("width");
					a.nTable.style.width = -1 !== g.indexOf("%") ? g : q(i(b).outerWidth());
					b.parentNode.removeChild(b)
				}
				e && (a.nTable.style.width = q(e))
			}

			function Na(a, b) {
				"" === a.oScroll.sX && "" !== a.oScroll.sY ? (i(b).width(), b.style.width = q(i(b).outerWidth() - a.oScroll.iBarWidth)) : "" !== a.oScroll.sX && (b.style.width = q(i(b).outerWidth()))
			}

			function Ma(a, b) {
				var c = Oa(a, b);
				if (0 > c) return null;
				if (null === a.aoData[c].nTr) {
					var d = l.createElement("td");
					d.innerHTML = w(a, c, b, "");
					return d
				}
				return L(a, c)[b]
			}

			function Oa(a, b) {
				for (var c = -1, d = -1, g = 0; g < a.aoData.length; g++) {
					var f = w(a, g, b, "display") + "",
						f = f.replace(/<.*?>/g, "");
					f.length > c && (c = f.length, d = g)
				}
				return d
			}

			function q(a) {
				if (null === a) return "0px";
				if ("number" == typeof a) return 0 > a ? "0px" : a + "px";
				var b = a.charCodeAt(a.length - 1);
				return 48 > b || 57 < b ? a : a + "px"
			}

			function Pa() {
				var a = l.createElement("p"),
					b = a.style;
				b.width = "100%";
				b.height = "200px";
				b.padding = "0px";
				var c = l.createElement("div"),
					b = c.style;
				b.position = "absolute";
				b.top = "0px";
				b.left = "0px";
				b.visibility = "hidden";
				b.width = "200px";
				b.height = "150px";
				b.padding = "0px";
				b.overflow = "hidden";
				c.appendChild(a);
				l.body.appendChild(c);
				b = a.offsetWidth;
				c.style.overflow = "scroll";
				a = a.offsetWidth;
				b == a && (a = c.clientWidth);
				l.body.removeChild(c);
				return b - a
			}

			function P(a, b) {
				var c, d, g, f, h, e, o = [],
					m = [],
					k = j.ext.oSort,
					r = a.aoData,
					l = a.aoColumns,
					p = a.oLanguage.oAria;
				if (!a.oFeatures.bServerSide && (0 !== a.aaSorting.length || null !== a.aaSortingFixed)) {
					o = null !== a.aaSortingFixed ? a.aaSortingFixed.concat(a.aaSorting) : a.aaSorting.slice();
					for (c = 0; c < o.length; c++) if (d = o[c][0], g = t(a, d), f = a.aoColumns[d].sSortDataType, j.ext.afnSortData[f]) if (h = j.ext.afnSortData[f].call(a.oInstance, a, d, g), h.length === r.length) {
						g = 0;
						for (f = r.length; g < f; g++) I(a, g, d, h[g])
					} else E(a, 0, "Returned data sort array (col " + d + ") is the wrong length");
					c = 0;
					for (d = a.aiDisplayMaster.length; c < d; c++) m[a.aiDisplayMaster[c]] = c;
					var q = o.length,
						G;
					c = 0;
					for (d = r.length; c < d; c++) for (g = 0; g < q; g++) {
						G = l[o[g][0]].aDataSort;
						h = 0;
						for (e = G.length; h < e; h++) f = l[G[h]].sType, f = k[(f ? f : "string") + "-pre"], r[c]._aSortData[G[h]] = f ? f(w(a, c, G[h], "sort")) : w(a, c, G[h], "sort")
					}
					a.aiDisplayMaster.sort(function(a, b) {
						var c, d, g, f, h;
						for (c = 0; c < q; c++) {
							h = l[o[c][0]].aDataSort;
							d = 0;
							for (g = h.length; d < g; d++) if (f = l[h[d]].sType, f = k[(f ? f : "string") + "-" + o[c][1]](r[a]._aSortData[h[d]], r[b]._aSortData[h[d]]), 0 !== f) return f
						}
						return k["numeric-asc"](m[a], m[b])
					})
				}(b === n || b) && !a.oFeatures.bDeferRender && Q(a);
				c = 0;
				for (d = a.aoColumns.length; c < d; c++) f = l[c].sTitle.replace(/<.*?>/g, ""), g = l[c].nTh, g.removeAttribute("aria-sort"), g.removeAttribute("aria-label"), l[c].bSortable ? 0 < o.length && o[0][0] == c ? (g.setAttribute("aria-sort", "asc" == o[0][1] ? "ascending" : "descending"), g.setAttribute("aria-label", f + ("asc" == (l[c].asSorting[o[0][2] + 1] ? l[c].asSorting[o[0][2] + 1] : l[c].asSorting[0]) ? p.sSortAscending : p.sSortDescending))) : g.setAttribute("aria-label", f + ("asc" == l[c].asSorting[0] ? p.sSortAscending : p.sSortDescending)) : g.setAttribute("aria-label", f);
				a.bSorted = !0;
				i(a.oInstance).trigger("sort", a);
				a.oFeatures.bFilter ? M(a, a.oPreviousSearch, 1) : (a.aiDisplay = a.aiDisplayMaster.slice(), a._iDisplayStart = 0, A(a), y(a))
			}

			function ga(a, b, c, d) {
				Qa(b, {}, function(b) {
					if (!1 !== a.aoColumns[c].bSortable) {
						var f = function() {
								var d, f;
								if (b.shiftKey) {
									for (var e = !1, i = 0; i < a.aaSorting.length; i++) if (a.aaSorting[i][0] == c) {
										e = !0;
										d = a.aaSorting[i][0];
										f = a.aaSorting[i][2] + 1;
										a.aoColumns[d].asSorting[f] ? (a.aaSorting[i][1] = a.aoColumns[d].asSorting[f], a.aaSorting[i][2] = f) : a.aaSorting.splice(i, 1);
										break
									}!1 === e && a.aaSorting.push([c, a.aoColumns[c].asSorting[0], 0])
								} else 1 == a.aaSorting.length && a.aaSorting[0][0] == c ? (d = a.aaSorting[0][0], f = a.aaSorting[0][2] + 1, a.aoColumns[d].asSorting[f] || (f = 0), a.aaSorting[0][1] = a.aoColumns[d].asSorting[f], a.aaSorting[0][2] = f) : (a.aaSorting.splice(0, a.aaSorting.length), a.aaSorting.push([c, a.aoColumns[c].asSorting[0], 0]));
								P(a)
							};
						a.oFeatures.bProcessing ? (F(a, !0), setTimeout(function() {
							f();
							a.oFeatures.bServerSide || F(a, !1)
						}, 0)) : f();
						"function" == typeof d && d(a)
					}
				})
			}

			function Q(a) {
				var b, c, d, g, f, h = a.aoColumns.length,
					e = a.oClasses;
				for (b = 0; b < h; b++) a.aoColumns[b].bSortable && i(a.aoColumns[b].nTh).removeClass(e.sSortAsc + " " + e.sSortDesc + " " + a.aoColumns[b].sSortingClass);
				g = null !== a.aaSortingFixed ? a.aaSortingFixed.concat(a.aaSorting) : a.aaSorting.slice();
				for (b = 0; b < a.aoColumns.length; b++) if (a.aoColumns[b].bSortable) {
					f = a.aoColumns[b].sSortingClass;
					d = -1;
					for (c = 0; c < g.length; c++) if (g[c][0] == b) {
						f = "asc" == g[c][1] ? e.sSortAsc : e.sSortDesc;
						d = c;
						break
					}
					i(a.aoColumns[b].nTh).addClass(f);
					a.bJUI && (c = i("span." + e.sSortIcon, a.aoColumns[b].nTh), c.removeClass(e.sSortJUIAsc + " " + e.sSortJUIDesc + " " + e.sSortJUI + " " + e.sSortJUIAscAllowed + " " + e.sSortJUIDescAllowed), c.addClass(-1 == d ? a.aoColumns[b].sSortingClassJUI : "asc" == g[d][1] ? e.sSortJUIAsc : e.sSortJUIDesc))
				} else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);
				f = e.sSortColumn;
				if (a.oFeatures.bSort && a.oFeatures.bSortClasses) {
					d = L(a);
					if (a.oFeatures.bDeferRender) i(d).removeClass(f + "1 " + f + "2 " + f + "3");
					else if (d.length >= h) for (b = 0; b < h; b++) if (-1 != d[b].className.indexOf(f + "1")) {
						c = 0;
						for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(f + "1", ""))
					} else if (-1 != d[b].className.indexOf(f + "2")) {
						c = 0;
						for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(f + "2", ""))
					} else if (-1 != d[b].className.indexOf(f + "3")) {
						c = 0;
						for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(" " + f + "3", ""))
					}
					var e = 1,
						j;
					for (b = 0; b < g.length; b++) {
						j = parseInt(g[b][0], 10);
						c = 0;
						for (a = d.length / h; c < a; c++) d[h * c + j].className += " " + f + e;
						3 > e && e++
					}
				}
			}

			function qa(a) {
				if (a.oFeatures.bStateSave && !a.bDestroying) {
					var b, c;
					b = a.oScroll.bInfinite;
					var d = {
						iCreate: (new Date).getTime(),
						iStart: b ? 0 : a._iDisplayStart,
						iEnd: b ? a._iDisplayLength : a._iDisplayEnd,
						iLength: a._iDisplayLength,
						aaSorting: i.extend(!0, [], a.aaSorting),
						oSearch: i.extend(!0, {}, a.oPreviousSearch),
						aoSearchCols: i.extend(!0, [], a.aoPreSearchCols),
						abVisCols: []
					};
					b = 0;
					for (c = a.aoColumns.length; b < c; b++) d.abVisCols.push(a.aoColumns[b].bVisible);
					C(a, "aoStateSaveParams", "stateSaveParams", [a, d]);
					a.fnStateSave.call(a.oInstance, a, d)
				}
			}

			function Ra(a, b) {
				if (a.oFeatures.bStateSave) {
					var c = a.fnStateLoad.call(a.oInstance, a);
					if (c) {
						var d = C(a, "aoStateLoadParams", "stateLoadParams", [a, c]);
						if (-1 === i.inArray(!1, d)) {
							a.oLoadedState = i.extend(!0, {}, c);
							a._iDisplayStart = c.iStart;
							a.iInitDisplayStart = c.iStart;
							a._iDisplayEnd = c.iEnd;
							a._iDisplayLength = c.iLength;
							a.aaSorting = c.aaSorting.slice();
							a.saved_aaSorting = c.aaSorting.slice();
							i.extend(a.oPreviousSearch, c.oSearch);
							i.extend(!0, a.aoPreSearchCols, c.aoSearchCols);
							b.saved_aoColumns = [];
							for (d = 0; d < c.abVisCols.length; d++) b.saved_aoColumns[d] = {}, b.saved_aoColumns[d].bVisible = c.abVisCols[d];
							C(a, "aoStateLoaded", "stateLoaded", [a, c])
						}
					}
				}
			}

			function Sa(a) {
				for (var b = V.location.pathname.split("/"), a = a + "_" + b[b.length - 1].replace(/[\/:]/g, "").toLowerCase() + "=", b = l.cookie.split(";"), c = 0; c < b.length; c++) {
					for (var d = b[c];
					" " == d.charAt(0);) d = d.substring(1, d.length);
					if (0 === d.indexOf(a)) return decodeURIComponent(d.substring(a.length, d.length))
				}
				return null
			}

			function u(a) {
				for (var b = 0; b < j.settings.length; b++) if (j.settings[b].nTable === a) return j.settings[b];
				return null
			}

			function S(a) {
				for (var b = [], a = a.aoData, c = 0, d = a.length; c < d; c++) null !== a[c].nTr && b.push(a[c].nTr);
				return b
			}

			function L(a, b) {
				var c = [],
					d, g, f, e, i, j;
				g = 0;
				var o = a.aoData.length;
				b !== n && (g = b, o = b + 1);
				for (f = g; f < o; f++) if (j = a.aoData[f], null !== j.nTr) {
					g = [];
					e = 0;
					for (i = j.nTr.childNodes.length; e < i; e++) d = j.nTr.childNodes[e].nodeName.toLowerCase(), ("td" == d || "th" == d) && g.push(j.nTr.childNodes[e]);
					e = d = 0;
					for (i = a.aoColumns.length; e < i; e++) a.aoColumns[e].bVisible ? c.push(g[e - d]) : (c.push(j._anHidden[e]), d++)
				}
				return c
			}

			function E(a, b, c) {
				a = null === a ? "DataTables warning: " + c : "DataTables warning (table id = '" + a.sTableId + "'): " + c;
				if (0 === b) if ("alert" == j.ext.sErrMode) alert(a);
				else throw Error(a);
				else V.console && console.log && console.log(a)
			}

			function p(a, b, c, d) {
				d === n && (d = c);
				b[c] !== n && (a[d] = b[c])
			}

			function Ta(a, b) {
				for (var c in b) b.hasOwnProperty(c) && ("object" === typeof e[c] && !1 === i.isArray(b[c]) ? i.extend(!0, a[c], b[c]) : a[c] = b[c]);
				return a
			}

			function Qa(a, b, c) {
				i(a).bind("click.DT", b, function(b) {
					a.blur();
					c(b)
				}).bind("keypress.DT", b, function(a) {
					13 === a.which && c(a)
				}).bind("selectstart.DT", function() {
					return !1
				})
			}

			function B(a, b, c, d) {
				c && a[b].push({
					fn: c,
					sName: d
				})
			}

			function C(a, b, c, d) {
				for (var b = a[b], g = [], f = b.length - 1; 0 <= f; f--) g.push(b[f].fn.apply(a.oInstance, d));
				null !== c && i(a.oInstance).trigger(c, d);
				return g
			}

			function Ua(a) {
				return function() {
					var b = [u(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));
					return j.ext.oApi[a].apply(this, b)
				}
			}
			var Va = V.JSON ? JSON.stringify : function(a) {
					var b = typeof a;
					if ("object" !== b || null === a) return "string" === b && (a = '"' + a + '"'), a + "";
					var c, d, g = [],
						f = i.isArray(a);
					for (c in a) d = a[c], b = typeof d, "string" === b ? d = '"' + d + '"' : "object" === b && null !== d && (d = Va(d)), g.push((f ? "" : '"' + c + '":') + d);
					return (f ? "[" : "{") + g + (f ? "]" : "}")
				};
			this.$ = function(a, b) {
				var c, d, g = [],
					f;
				d = u(this[j.ext.iApiIndex]);
				var e = d.aoData,
					o = d.aiDisplay,
					k = d.aiDisplayMaster;
				b || (b = {});
				b = i.extend({}, {
					filter: "none",
					order: "current",
					page: "all"
				}, b);
				if ("current" == b.page) {
					c = d._iDisplayStart;
					for (d = d.fnDisplayEnd(); c < d; c++)(f = e[o[c]].nTr) && g.push(f)
				} else if ("current" == b.order && "none" == b.filter) {
					c = 0;
					for (d = k.length; c < d; c++)(f = e[k[c]].nTr) && g.push(f)
				} else if ("current" == b.order && "applied" == b.filter) {
					c = 0;
					for (d = o.length; c < d; c++)(f = e[o[c]].nTr) && g.push(f)
				} else if ("original" == b.order && "none" == b.filter) {
					c = 0;
					for (d = e.length; c < d; c++)(f = e[c].nTr) && g.push(f)
				} else if ("original" == b.order && "applied" == b.filter) {
					c = 0;
					for (d = e.length; c < d; c++) f = e[c].nTr, -1 !== i.inArray(c, o) && f && g.push(f)
				} else E(d, 1, "Unknown selection options");
				g = i(g);
				c = g.filter(a);
				g = g.find(a);
				return i([].concat(i.makeArray(c), i.makeArray(g)))
			};
			this._ = function(a, b) {
				var c = [],
					d, g, e = this.$(a, b);
				d = 0;
				for (g = e.length; d < g; d++) c.push(this.fnGetData(e[d]));
				return c
			};
			this.fnAddData = function(a, b) {
				if (0 === a.length) return [];
				var c = [],
					d, g = u(this[j.ext.iApiIndex]);
				if ("object" === typeof a[0] && null !== a[0]) for (var e = 0; e < a.length; e++) {
					d = H(g, a[e]);
					if (-1 == d) return c;
					c.push(d)
				} else {
					d = H(g, a);
					if (-1 == d) return c;
					c.push(d)
				}
				g.aiDisplay = g.aiDisplayMaster.slice();
				(b === n || b) && $(g);
				return c
			};
			this.fnAdjustColumnSizing = function(a) {
				var b = u(this[j.ext.iApiIndex]);
				k(b);
				a === n || a ? this.fnDraw(!1) : ("" !== b.oScroll.sX || "" !== b.oScroll.sY) && this.oApi._fnScrollDraw(b)
			};
			this.fnClearTable = function(a) {
				var b = u(this[j.ext.iApiIndex]);
				ea(b);
				(a === n || a) && y(b)
			};
			this.fnClose = function(a) {
				for (var b = u(this[j.ext.iApiIndex]), c = 0; c < b.aoOpenRows.length; c++) if (b.aoOpenRows[c].nParent == a) return (a = b.aoOpenRows[c].nTr.parentNode) && a.removeChild(b.aoOpenRows[c].nTr), b.aoOpenRows.splice(c, 1), 0;
				return 1
			};
			this.fnDeleteRow = function(a, b, c) {
				var d = u(this[j.ext.iApiIndex]),
					g, e, a = "object" === typeof a ? K(d, a) : a,
					h = d.aoData.splice(a, 1);
				g = 0;
				for (e = d.aoData.length; g < e; g++) null !== d.aoData[g].nTr && (d.aoData[g].nTr._DT_RowIndex = g);
				g = i.inArray(a, d.aiDisplay);
				d.asDataSearch.splice(g, 1);
				fa(d.aiDisplayMaster, a);
				fa(d.aiDisplay, a);
				"function" === typeof b && b.call(this, d, h);
				d._iDisplayStart >= d.fnRecordsDisplay() && (d._iDisplayStart -= d._iDisplayLength, 0 > d._iDisplayStart && (d._iDisplayStart = 0));
				if (c === n || c) A(d), y(d);
				return h
			};
			this.fnDestroy = function(a) {
				var b = u(this[j.ext.iApiIndex]),
					c = b.nTableWrapper.parentNode,
					d = b.nTBody,
					g, e, a = a === n ? !1 : !0;
				b.bDestroying = !0;
				C(b, "aoDestroyCallback", "destroy", [b]);
				g = 0;
				for (e = b.aoColumns.length; g < e; g++)!1 === b.aoColumns[g].bVisible && this.fnSetColumnVis(g, !0);
				i(b.nTableWrapper).find("*").andSelf().unbind(".DT");
				i("tbody>tr>td." + b.oClasses.sRowEmpty, b.nTable).parent().remove();
				b.nTable != b.nTHead.parentNode && (i(b.nTable).children("thead").remove(), b.nTable.appendChild(b.nTHead));
				b.nTFoot && b.nTable != b.nTFoot.parentNode && (i(b.nTable).children("tfoot").remove(), b.nTable.appendChild(b.nTFoot));
				b.nTable.parentNode.removeChild(b.nTable);
				i(b.nTableWrapper).remove();
				b.aaSorting = [];
				b.aaSortingFixed = [];
				Q(b);
				i(S(b)).removeClass(b.asStripeClasses.join(" "));
				i("th, td", b.nTHead).removeClass([b.oClasses.sSortable, b.oClasses.sSortableAsc, b.oClasses.sSortableDesc, b.oClasses.sSortableNone].join(" "));
				b.bJUI && (i("th span." + b.oClasses.sSortIcon + ", td span." + b.oClasses.sSortIcon, b.nTHead).remove(), i("th, td", b.nTHead).each(function() {
					var a = i("div." + b.oClasses.sSortJUIWrapper, this),
						c = a.contents();
					i(this).append(c);
					a.remove()
				}));
				!a && b.nTableReinsertBefore ? c.insertBefore(b.nTable, b.nTableReinsertBefore) : a || c.appendChild(b.nTable);
				g = 0;
				for (e = b.aoData.length; g < e; g++) null !== b.aoData[g].nTr && d.appendChild(b.aoData[g].nTr);
				!0 === b.oFeatures.bAutoWidth && (b.nTable.style.width = q(b.sDestroyWidth));
				i(d).children("tr:even").addClass(b.asDestroyStripes[0]);
				i(d).children("tr:odd").addClass(b.asDestroyStripes[1]);
				g = 0;
				for (e = j.settings.length; g < e; g++) j.settings[g] == b && j.settings.splice(g, 1);
				b = null
			};
			this.fnDraw = function(a) {
				var b = u(this[j.ext.iApiIndex]);
				!1 === a ? (A(b), y(b)) : $(b)
			};
			this.fnFilter = function(a, b, c, d, e, f) {
				var h = u(this[j.ext.iApiIndex]);
				if (h.oFeatures.bFilter) {
					if (c === n || null === c) c = !1;
					if (d === n || null === d) d = !0;
					if (e === n || null === e) e = !0;
					if (f === n || null === f) f = !0;
					if (b === n || null === b) {
						if (M(h, {
							sSearch: a + "",
							bRegex: c,
							bSmart: d,
							bCaseInsensitive: f
						}, 1), e && h.aanFeatures.f) {
							b = h.aanFeatures.f;
							c = 0;
							for (d = b.length; c < d; c++) i(b[c]._DT_Input).val(a)
						}
					} else i.extend(h.aoPreSearchCols[b], {
						sSearch: a + "",
						bRegex: c,
						bSmart: d,
						bCaseInsensitive: f
					}), M(h, h.oPreviousSearch, 1)
				}
			};
			this.fnGetData = function(a, b) {
				var c = u(this[j.ext.iApiIndex]);
				if (a !== n) {
					var d = a;
					if ("object" === typeof a) {
						var e = a.nodeName.toLowerCase();
						"tr" === e ? d = K(c, a) : "td" === e && (d = K(c, a.parentNode), b = da(c, d, a))
					}
					return b !== n ? w(c, d, b, "") : c.aoData[d] !== n ? c.aoData[d]._aData : null
				}
				return Y(c)
			};
			this.fnGetNodes = function(a) {
				var b = u(this[j.ext.iApiIndex]);
				return a !== n ? b.aoData[a] !== n ? b.aoData[a].nTr : null : S(b)
			};
			this.fnGetPosition = function(a) {
				var b = u(this[j.ext.iApiIndex]),
					c = a.nodeName.toUpperCase();
				return "TR" == c ? K(b, a) : "TD" == c || "TH" == c ? (c = K(b, a.parentNode), a = da(b, c, a), [c, t(b, a), a]) : null
			};
			this.fnIsOpen = function(a) {
				for (var b = u(this[j.ext.iApiIndex]), c = 0; c < b.aoOpenRows.length; c++) if (b.aoOpenRows[c].nParent == a) return !0;
				return !1
			};
			this.fnOpen = function(a, b, c) {
				var d = u(this[j.ext.iApiIndex]),
					e = S(d);
				if (-1 !== i.inArray(a, e)) {
					this.fnClose(a);
					var e = l.createElement("tr"),
						f = l.createElement("td");
					e.appendChild(f);
					f.className = c;
					f.colSpan = v(d);
					"string" === typeof b ? f.innerHTML = b : i(f).html(b);
					b = i("tr", d.nTBody); - 1 != i.inArray(a, b) && i(e).insertAfter(a);
					d.aoOpenRows.push({
						nTr: e,
						nParent: a
					});
					return e
				}
			};
			this.fnPageChange = function(a, b) {
				var c = u(this[j.ext.iApiIndex]);
				pa(c, a);
				A(c);
				(b === n || b) && y(c)
			};
			this.fnSetColumnVis = function(a, b, c) {
				var d = u(this[j.ext.iApiIndex]),
					e, f, h = d.aoColumns,
					i = d.aoData,
					o, m;
				if (h[a].bVisible != b) {
					if (b) {
						for (e = f = 0; e < a; e++) h[e].bVisible && f++;
						m = f >= v(d);
						if (!m) for (e = a; e < h.length; e++) if (h[e].bVisible) {
							o = e;
							break
						}
						e = 0;
						for (f = i.length; e < f; e++) null !== i[e].nTr && (m ? i[e].nTr.appendChild(i[e]._anHidden[a]) : i[e].nTr.insertBefore(i[e]._anHidden[a], L(d, e)[o]))
					} else {
						e = 0;
						for (f = i.length; e < f; e++) null !== i[e].nTr && (o = L(d, e)[a], i[e]._anHidden[a] = o, o.parentNode.removeChild(o))
					}
					h[a].bVisible = b;
					U(d, d.aoHeader);
					d.nTFoot && U(d, d.aoFooter);
					e = 0;
					for (f = d.aoOpenRows.length; e < f; e++) d.aoOpenRows[e].nTr.colSpan = v(d);
					if (c === n || c) k(d), y(d);
					qa(d)
				}
			};
			this.fnSettings = function() {
				return u(this[j.ext.iApiIndex])
			};
			this.fnSort = function(a) {
				var b = u(this[j.ext.iApiIndex]);
				b.aaSorting = a;
				P(b)
			};
			this.fnSortListener = function(a, b, c) {
				ga(u(this[j.ext.iApiIndex]), a, b, c)
			};
			this.fnUpdate = function(a, b, c, d, e) {
				var f = u(this[j.ext.iApiIndex]),
					b = "object" === typeof b ? K(f, b) : b;
				if (f.__fnUpdateDeep === n && i.isArray(a) && "object" === typeof a) {
					f.aoData[b]._aData = a.slice();
					f.__fnUpdateDeep = !0;
					for (c = 0; c < f.aoColumns.length; c++) this.fnUpdate(w(f, b, c), b, c, !1, !1);
					f.__fnUpdateDeep = n
				} else if (f.__fnUpdateDeep === n && null !== a && "object" === typeof a) {
					f.aoData[b]._aData = i.extend(!0, {}, a);
					f.__fnUpdateDeep = !0;
					for (c = 0; c < f.aoColumns.length; c++) this.fnUpdate(w(f, b, c), b, c, !1, !1);
					f.__fnUpdateDeep = n
				} else {
					I(f, b, c, a);
					var a = w(f, b, c, "display"),
						h = f.aoColumns[c];
					null !== h.fnRender && (a = R(f, b, c), h.bUseRendered && I(f, b, c, a));
					null !== f.aoData[b].nTr && (L(f, b)[c].innerHTML = a)
				}
				c = i.inArray(b, f.aiDisplay);
				f.asDataSearch[c] = ma(f, X(f, b, "filter"));
				(e === n || e) && k(f);
				(d === n || d) && $(f);
				return 0
			};
			this.fnVersionCheck = j.ext.fnVersionCheck;
			this.oApi = {
				_fnExternApiFunc: Ua,
				_fnInitialise: aa,
				_fnInitComplete: Z,
				_fnLanguageCompat: oa,
				_fnAddColumn: o,
				_fnColumnOptions: r,
				_fnAddData: H,
				_fnCreateTr: ca,
				_fnGatherData: ua,
				_fnBuildHead: va,
				_fnDrawHead: U,
				_fnDraw: y,
				_fnReDraw: $,
				_fnAjaxUpdate: wa,
				_fnAjaxParameters: Ea,
				_fnAjaxUpdateDraw: Fa,
				_fnServerParams: ia,
				_fnAddOptionsHtml: xa,
				_fnFeatureHtmlTable: Ba,
				_fnScrollDraw: Ka,
				_fnAdjustColumnSizing: k,
				_fnFeatureHtmlFilter: za,
				_fnFilterComplete: M,
				_fnFilterCustom: Ia,
				_fnFilterColumn: Ha,
				_fnFilter: Ga,
				_fnBuildSearchArray: ja,
				_fnBuildSearchRow: ma,
				_fnFilterCreateSearch: ka,
				_fnDataToSearch: la,
				_fnSort: P,
				_fnSortAttachListener: ga,
				_fnSortingClasses: Q,
				_fnFeatureHtmlPaginate: Da,
				_fnPageChange: pa,
				_fnFeatureHtmlInfo: Ca,
				_fnUpdateInfo: Ja,
				_fnFeatureHtmlLength: ya,
				_fnFeatureHtmlProcessing: Aa,
				_fnProcessingDisplay: F,
				_fnVisibleToColumnIndex: G,
				_fnColumnIndexToVisible: t,
				_fnNodeToDataIndex: K,
				_fnVisbleColumns: v,
				_fnCalculateEnd: A,
				_fnConvertToWidth: La,
				_fnCalculateColumnWidths: ba,
				_fnScrollingWidthAdjust: Na,
				_fnGetWidestNode: Ma,
				_fnGetMaxLenString: Oa,
				_fnStringToCss: q,
				_fnDetectType: z,
				_fnSettingsFromNode: u,
				_fnGetDataMaster: Y,
				_fnGetTrNodes: S,
				_fnGetTdNodes: L,
				_fnEscapeRegex: na,
				_fnDeleteIndex: fa,
				_fnReOrderIndex: D,
				_fnColumnOrdering: x,
				_fnLog: E,
				_fnClearTable: ea,
				_fnSaveState: qa,
				_fnLoadState: Ra,
				_fnCreateCookie: function(a, b, c, d, e) {
					var f = new Date;
					f.setTime(f.getTime() + 1E3 * c);
					var c = V.location.pathname.split("/"),
						a = a + "_" + c.pop().replace(/[\/:]/g, "").toLowerCase(),
						h;
					null !== e ? (h = "function" === typeof i.parseJSON ? i.parseJSON(b) : eval("(" + b + ")"), b = e(a, h, f.toGMTString(), c.join("/") + "/")) : b = a + "=" + encodeURIComponent(b) + "; expires=" + f.toGMTString() + "; path=" + c.join("/") + "/";
					e = "";
					f = 9999999999999;
					if (4096 < (null !== Sa(a) ? l.cookie.length : b.length + l.cookie.length) + 10) {
						for (var a = l.cookie.split(";"), o = 0, j = a.length; o < j; o++) if (-1 != a[o].indexOf(d)) {
							var k = a[o].split("=");
							try {
								h = eval("(" + decodeURIComponent(k[1]) + ")")
							} catch (r) {
								continue
							}
							h.iCreate && h.iCreate < f && (e = k[0], f = h.iCreate)
						}
						"" !== e && (l.cookie = e + "=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=" + c.join("/") + "/")
					}
					l.cookie = b
				},
				_fnReadCookie: Sa,
				_fnDetectHeader: T,
				_fnGetUniqueThs: O,
				_fnScrollBarWidth: Pa,
				_fnApplyToChildren: N,
				_fnMap: p,
				_fnGetRowData: X,
				_fnGetCellData: w,
				_fnSetCellData: I,
				_fnGetObjectDataFn: W,
				_fnSetObjectDataFn: ta,
				_fnApplyColumnDefs: J,
				_fnBindAction: Qa,
				_fnExtend: Ta,
				_fnCallbackReg: B,
				_fnCallbackFire: C,
				_fnJsonString: Va,
				_fnRender: R,
				_fnNodeToColumnIndex: da,
				_fnInfoMacros: ha
			};
			i.extend(j.ext.oApi, this.oApi);
			for (var ra in j.ext.oApi) ra && (this[ra] = Ua(ra));
			var sa = this;
			return this.each(function() {
				var a = 0,
					b, c, d;
				c = this.getAttribute("id");
				var g = !1,
					f = !1;
				if ("table" != this.nodeName.toLowerCase()) E(null, 0, "Attempted to initialise DataTables on a node which is not a table: " + this.nodeName);
				else {
					a = 0;
					for (b = j.settings.length; a < b; a++) {
						if (j.settings[a].nTable == this) {
							if (e === n || e.bRetrieve) return j.settings[a].oInstance;
							if (e.bDestroy) {
								j.settings[a].oInstance.fnDestroy();
								break
							} else {
								E(j.settings[a], 0, "Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy");
								return
							}
						}
						if (j.settings[a].sTableId == this.id) {
							j.settings.splice(a, 1);
							break
						}
					}
					if (null === c || "" === c) this.id = c = "DataTables_Table_" + j.ext._oExternConfig.iNextUnique++;
					var h = i.extend(!0, {}, j.models.oSettings, {
						nTable: this,
						oApi: sa.oApi,
						oInit: e,
						sDestroyWidth: i(this).width(),
						sInstance: c,
						sTableId: c
					});
					j.settings.push(h);
					h.oInstance = 1 === sa.length ? sa : i(this).dataTable();
					e || (e = {});
					e.oLanguage && oa(e.oLanguage);
					e = Ta(i.extend(!0, {}, j.defaults), e);
					p(h.oFeatures, e, "bPaginate");
					p(h.oFeatures, e, "bLengthChange");
					p(h.oFeatures, e, "bFilter");
					p(h.oFeatures, e, "bSort");
					p(h.oFeatures, e, "bInfo");
					p(h.oFeatures, e, "bProcessing");
					p(h.oFeatures, e, "bAutoWidth");
					p(h.oFeatures, e, "bSortClasses");
					p(h.oFeatures, e, "bServerSide");
					p(h.oFeatures, e, "bDeferRender");
					p(h.oScroll, e, "sScrollX", "sX");
					p(h.oScroll, e, "sScrollXInner", "sXInner");
					p(h.oScroll, e, "sScrollY", "sY");
					p(h.oScroll, e, "bScrollCollapse", "bCollapse");
					p(h.oScroll, e, "bScrollInfinite", "bInfinite");
					p(h.oScroll, e, "iScrollLoadGap", "iLoadGap");
					p(h.oScroll, e, "bScrollAutoCss", "bAutoCss");
					p(h, e, "asStripeClasses");
					p(h, e, "asStripClasses", "asStripeClasses");
					p(h, e, "fnServerData");
					p(h, e, "fnFormatNumber");
					p(h, e, "sServerMethod");
					p(h, e, "aaSorting");
					p(h, e, "aaSortingFixed");
					p(h, e, "aLengthMenu");
					p(h, e, "sPaginationType");
					p(h, e, "sAjaxSource");
					p(h, e, "sAjaxDataProp");
					p(h, e, "iCookieDuration");
					p(h, e, "sCookiePrefix");
					p(h, e, "sDom");
					p(h, e, "bSortCellsTop");
					p(h, e, "iTabIndex");
					p(h, e, "oSearch", "oPreviousSearch");
					p(h, e, "aoSearchCols", "aoPreSearchCols");
					p(h, e, "iDisplayLength", "_iDisplayLength");
					p(h, e, "bJQueryUI", "bJUI");
					p(h, e, "fnCookieCallback");
					p(h, e, "fnStateLoad");
					p(h, e, "fnStateSave");
					p(h.oLanguage, e, "fnInfoCallback");
					B(h, "aoDrawCallback", e.fnDrawCallback, "user");
					B(h, "aoServerParams", e.fnServerParams, "user");
					B(h, "aoStateSaveParams", e.fnStateSaveParams, "user");
					B(h, "aoStateLoadParams", e.fnStateLoadParams, "user");
					B(h, "aoStateLoaded", e.fnStateLoaded, "user");
					B(h, "aoRowCallback", e.fnRowCallback, "user");
					B(h, "aoRowCreatedCallback", e.fnCreatedRow, "user");
					B(h, "aoHeaderCallback", e.fnHeaderCallback, "user");
					B(h, "aoFooterCallback", e.fnFooterCallback, "user");
					B(h, "aoInitComplete", e.fnInitComplete, "user");
					B(h, "aoPreDrawCallback", e.fnPreDrawCallback, "user");
					h.oFeatures.bServerSide && h.oFeatures.bSort && h.oFeatures.bSortClasses ? B(h, "aoDrawCallback", Q, "server_side_sort_classes") : h.oFeatures.bDeferRender && B(h, "aoDrawCallback", Q, "defer_sort_classes");
					e.bJQueryUI ? (i.extend(h.oClasses, j.ext.oJUIClasses), e.sDom === j.defaults.sDom && "lfrtip" === j.defaults.sDom && (h.sDom = '<"H"lfr>t<"F"ip>')) : i.extend(h.oClasses, j.ext.oStdClasses);
					i(this).addClass(h.oClasses.sTable);
					if ("" !== h.oScroll.sX || "" !== h.oScroll.sY) h.oScroll.iBarWidth = Pa();
					h.iInitDisplayStart === n && (h.iInitDisplayStart = e.iDisplayStart, h._iDisplayStart = e.iDisplayStart);
					e.bStateSave && (h.oFeatures.bStateSave = !0, Ra(h, e), B(h, "aoDrawCallback", qa, "state_save"));
					null !== e.iDeferLoading && (h.bDeferLoading = !0, a = i.isArray(e.iDeferLoading), h._iRecordsDisplay = a ? e.iDeferLoading[0] : e.iDeferLoading, h._iRecordsTotal = a ? e.iDeferLoading[1] : e.iDeferLoading);
					null !== e.aaData && (f = !0);
					"" !== e.oLanguage.sUrl ? (h.oLanguage.sUrl = e.oLanguage.sUrl, i.getJSON(h.oLanguage.sUrl, null, function(a) {
						oa(a);
						i.extend(true, h.oLanguage, e.oLanguage, a);
						aa(h)
					}), g = !0) : i.extend(!0, h.oLanguage, e.oLanguage);
					null === e.asStripeClasses && (h.asStripeClasses = [h.oClasses.sStripeOdd, h.oClasses.sStripeEven]);
					c = !1;
					d = i(this).children("tbody").children("tr");
					a = 0;
					for (b = h.asStripeClasses.length; a < b; a++) if (d.filter(":lt(2)").hasClass(h.asStripeClasses[a])) {
						c = !0;
						break
					}
					c && (h.asDestroyStripes = ["", ""], i(d[0]).hasClass(h.oClasses.sStripeOdd) && (h.asDestroyStripes[0] += h.oClasses.sStripeOdd + " "), i(d[0]).hasClass(h.oClasses.sStripeEven) && (h.asDestroyStripes[0] += h.oClasses.sStripeEven), i(d[1]).hasClass(h.oClasses.sStripeOdd) && (h.asDestroyStripes[1] += h.oClasses.sStripeOdd + " "), i(d[1]).hasClass(h.oClasses.sStripeEven) && (h.asDestroyStripes[1] += h.oClasses.sStripeEven), d.removeClass(h.asStripeClasses.join(" ")));
					c = [];
					a = this.getElementsByTagName("thead");
					0 !== a.length && (T(h.aoHeader, a[0]), c = O(h));
					if (null === e.aoColumns) {
						d = [];
						a = 0;
						for (b = c.length; a < b; a++) d.push(null)
					} else d = e.aoColumns;
					a = 0;
					for (b = d.length; a < b; a++) e.saved_aoColumns !== n && e.saved_aoColumns.length == b && (null === d[a] && (d[a] = {}), d[a].bVisible = e.saved_aoColumns[a].bVisible), o(h, c ? c[a] : null);
					J(h, e.aoColumnDefs, d, function(a, b) {
						r(h, a, b)
					});
					a = 0;
					for (b = h.aaSorting.length; a < b; a++) {
						h.aaSorting[a][0] >= h.aoColumns.length && (h.aaSorting[a][0] = 0);
						var k = h.aoColumns[h.aaSorting[a][0]];
						h.aaSorting[a][2] === n && (h.aaSorting[a][2] = 0);
						e.aaSorting === n && h.saved_aaSorting === n && (h.aaSorting[a][1] = k.asSorting[0]);
						c = 0;
						for (d = k.asSorting.length; c < d; c++) if (h.aaSorting[a][1] == k.asSorting[c]) {
							h.aaSorting[a][2] = c;
							break
						}
					}
					Q(h);
					a = i(this).children("caption").each(function() {
						this._captionSide = i(this).css("caption-side")
					});
					b = i(this).children("thead");
					0 === b.length && (b = [l.createElement("thead")], this.appendChild(b[0]));
					h.nTHead = b[0];
					b = i(this).children("tbody");
					0 === b.length && (b = [l.createElement("tbody")], this.appendChild(b[0]));
					h.nTBody = b[0];
					h.nTBody.setAttribute("role", "alert");
					h.nTBody.setAttribute("aria-live", "polite");
					h.nTBody.setAttribute("aria-relevant", "all");
					b = i(this).children("tfoot");
					if (0 === b.length && 0 < a.length && ("" !== h.oScroll.sX || "" !== h.oScroll.sY)) b = [l.createElement("tfoot")], this.appendChild(b[0]);
					0 < b.length && (h.nTFoot = b[0], T(h.aoFooter, h.nTFoot));
					if (f) for (a = 0; a < e.aaData.length; a++) H(h, e.aaData[a]);
					else ua(h);
					h.aiDisplay = h.aiDisplayMaster.slice();
					h.bInitialised = !0;
					!1 === g && aa(h)
				}
			})
		};
	j.fnVersionCheck = function(e) {
		for (var i = function(e, i) {
				for (; e.length < i;) e += "0";
				return e
			}, r = j.ext.sVersion.split("."), e = e.split("."), k = "", n = "", l = 0, v = e.length; l < v; l++) k += i(r[l], 3), n += i(e[l], 3);
		return parseInt(k, 10) >= parseInt(n, 10)
	};
	j.fnIsDataTable = function(e) {
		for (var i = j.settings, r = 0; r < i.length; r++) if (i[r].nTable === e || i[r].nScrollHead === e || i[r].nScrollFoot === e) return !0;
		return !1
	};
	j.fnTables = function(e) {
		var o = [];
		jQuery.each(j.settings, function(j, k) {
			(!e || !0 === e && i(k.nTable).is(":visible")) && o.push(k.nTable)
		});
		return o
	};
	j.version = "1.9.2";
	j.settings = [];
	j.models = {};
	j.models.ext = {
		afnFiltering: [],
		afnSortData: [],
		aoFeatures: [],
		aTypes: [],
		fnVersionCheck: j.fnVersionCheck,
		iApiIndex: 0,
		ofnSearch: {},
		oApi: {},
		oStdClasses: {},
		oJUIClasses: {},
		oPagination: {},
		oSort: {},
		sVersion: j.version,
		sErrMode: "alert",
		_oExternConfig: {
			iNextUnique: 0
		}
	};
	j.models.oSearch = {
		bCaseInsensitive: !0,
		sSearch: "",
		bRegex: !1,
		bSmart: !0
	};
	j.models.oRow = {
		nTr: null,
		_aData: [],
		_aSortData: [],
		_anHidden: [],
		_sRowStripe: ""
	};
	j.models.oColumn = {
		aDataSort: null,
		asSorting: null,
		bSearchable: null,
		bSortable: null,
		bUseRendered: null,
		bVisible: null,
		_bAutoType: !0,
		fnCreatedCell: null,
		fnGetData: null,
		fnRender: null,
		fnSetData: null,
		mDataProp: null,
		nTh: null,
		nTf: null,
		sClass: null,
		sContentPadding: null,
		sDefaultContent: null,
		sName: null,
		sSortDataType: "std",
		sSortingClass: null,
		sSortingClassJUI: null,
		sTitle: null,
		sType: null,
		sWidth: null,
		sWidthOrig: null
	};
	j.defaults = {
		aaData: null,
		aaSorting: [
			[0, "asc"]
		],
		aaSortingFixed: null,
		aLengthMenu: [10, 25, 50, 100],
		aoColumns: null,
		aoColumnDefs: null,
		aoSearchCols: [],
		asStripeClasses: null,
		bAutoWidth: !0,
		bDeferRender: !1,
		bDestroy: !1,
		bFilter: !0,
		bInfo: !0,
		bJQueryUI: !1,
		bLengthChange: !0,
		bPaginate: !0,
		bProcessing: !1,
		bRetrieve: !1,
		bScrollAutoCss: !0,
		bScrollCollapse: !1,
		bScrollInfinite: !1,
		bServerSide: !1,
		bSort: !0,
		bSortCellsTop: !1,
		bSortClasses: !0,
		bStateSave: !1,
		fnCookieCallback: null,
		fnCreatedRow: null,
		fnDrawCallback: null,
		fnFooterCallback: null,
		fnFormatNumber: function(e) {
			if (1E3 > e) return e;
			for (var i = e + "", e = i.split(""), j = "", i = i.length, k = 0; k < i; k++) 0 === k % 3 && 0 !== k && (j = this.oLanguage.sInfoThousands + j), j = e[i - k - 1] + j;
			return j
		},
		fnHeaderCallback: null,
		fnInfoCallback: null,
		fnInitComplete: null,
		fnPreDrawCallback: null,
		fnRowCallback: null,
		fnServerData: function(e, j, n, k) {
			k.jqXHR = i.ajax({
				url: e,
				data: j,
				success: function(e) {
					i(k.oInstance).trigger("xhr", k);
					n(e)
				},
				dataType: "json",
				cache: !1,
				type: k.sServerMethod,
				error: function(e, i) {
					"parsererror" == i && k.oApi._fnLog(k, 0, "DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")
				}
			})
		},
		fnServerParams: null,
		fnStateLoad: function(e) {
			var e = this.oApi._fnReadCookie(e.sCookiePrefix + e.sInstance),
				j;
			try {
				j = "function" === typeof i.parseJSON ? i.parseJSON(e) : eval("(" + e + ")")
			} catch (n) {
				j = null
			}
			return j
		},
		fnStateLoadParams: null,
		fnStateLoaded: null,
		fnStateSave: function(e, i) {
			this.oApi._fnCreateCookie(e.sCookiePrefix + e.sInstance, this.oApi._fnJsonString(i), e.iCookieDuration, e.sCookiePrefix, e.fnCookieCallback)
		},
		fnStateSaveParams: null,
		iCookieDuration: 7200,
		iDeferLoading: null,
		iDisplayLength: 10,
		iDisplayStart: 0,
		iScrollLoadGap: 100,
		iTabIndex: 0,
		oLanguage: {
			oAria: {
				sSortAscending: ": activate to sort column ascending",
				sSortDescending: ": activate to sort column descending"
			},
			oPaginate: {
				sFirst: "首页",
				sLast: "末页",
				sNext: ">>",
				sPrevious: "<<"
			},
			sEmptyTable: "No data available in table",
			sInfo: "Showing _START_ to _END_ of _TOTAL_ entries",
			sInfoEmpty: "Showing 0 to 0 of 0 entries",
			sInfoFiltered: "(filtered from _MAX_ total entries)",
			sInfoPostFix: "",
			sInfoThousands: ",",
			sLengthMenu: "每页显示 _MENU_ 条",
			sLoadingRecords: "Loading...",
			sProcessing: "Processing...",
			sSearch: "搜索",
			sUrl: "",
			sZeroRecords: "No matching records found"
		},
		oSearch: i.extend({}, j.models.oSearch),
		sAjaxDataProp: "aaData",
		sAjaxSource: null,
		sCookiePrefix: "SpryMedia_DataTables_",
		sDom: "lfrtip",
		sPaginationType: "two_button",
		sScrollX: "",
		sScrollXInner: "",
		sScrollY: "",
		sServerMethod: "GET"
	};
	j.defaults.columns = {
		aDataSort: null,
		asSorting: ["asc", "desc"],
		bSearchable: !0,
		bSortable: !0,
		bUseRendered: !0,
		bVisible: !0,
		fnCreatedCell: null,
		fnRender: null,
		iDataSort: -1,
		mDataProp: null,
		sCellType: "td",
		sClass: "",
		sContentPadding: "",
		sDefaultContent: null,
		sName: "",
		sSortDataType: "std",
		sTitle: null,
		sType: null,
		sWidth: null
	};
	j.models.oSettings = {
		oFeatures: {
			bAutoWidth: null,
			bDeferRender: null,
			bFilter: null,
			bInfo: null,
			bLengthChange: null,
			bPaginate: null,
			bProcessing: null,
			bServerSide: null,
			bSort: null,
			bSortClasses: null,
			bStateSave: null
		},
		oScroll: {
			bAutoCss: null,
			bCollapse: null,
			bInfinite: null,
			iBarWidth: 0,
			iLoadGap: null,
			sX: null,
			sXInner: null,
			sY: null
		},
		oLanguage: {
			fnInfoCallback: null
		},
		aanFeatures: [],
		aoData: [],
		aiDisplay: [],
		aiDisplayMaster: [],
		aoColumns: [],
		aoHeader: [],
		aoFooter: [],
		asDataSearch: [],
		oPreviousSearch: {},
		aoPreSearchCols: [],
		aaSorting: null,
		aaSortingFixed: null,
		asStripeClasses: null,
		asDestroyStripes: [],
		sDestroyWidth: 0,
		aoRowCallback: [],
		aoHeaderCallback: [],
		aoFooterCallback: [],
		aoDrawCallback: [],
		aoRowCreatedCallback: [],
		aoPreDrawCallback: [],
		aoInitComplete: [],
		aoStateSaveParams: [],
		aoStateLoadParams: [],
		aoStateLoaded: [],
		sTableId: "",
		nTable: null,
		nTHead: null,
		nTFoot: null,
		nTBody: null,
		nTableWrapper: null,
		bDeferLoading: !1,
		bInitialised: !1,
		aoOpenRows: [],
		sDom: null,
		sPaginationType: "two_button",
		iCookieDuration: 0,
		sCookiePrefix: "",
		fnCookieCallback: null,
		aoStateSave: [],
		aoStateLoad: [],
		oLoadedState: null,
		sAjaxSource: null,
		sAjaxDataProp: null,
		bAjaxDataGet: !0,
		jqXHR: null,
		fnServerData: null,
		aoServerParams: [],
		sServerMethod: null,
		fnFormatNumber: null,
		aLengthMenu: null,
		iDraw: 0,
		bDrawing: !1,
		iDrawError: -1,
		_iDisplayLength: 10,
		_iDisplayStart: 0,
		_iDisplayEnd: 10,
		_iRecordsTotal: 0,
		_iRecordsDisplay: 0,
		bJUI: null,
		oClasses: {},
		bFiltered: !1,
		bSorted: !1,
		bSortCellsTop: null,
		oInit: null,
		aoDestroyCallback: [],
		fnRecordsTotal: function() {
			return this.oFeatures.bServerSide ? parseInt(this._iRecordsTotal, 10) : this.aiDisplayMaster.length
		},
		fnRecordsDisplay: function() {
			return this.oFeatures.bServerSide ? parseInt(this._iRecordsDisplay, 10) : this.aiDisplay.length
		},
		fnDisplayEnd: function() {
			return this.oFeatures.bServerSide ? !1 === this.oFeatures.bPaginate || -1 == this._iDisplayLength ? this._iDisplayStart + this.aiDisplay.length : Math.min(this._iDisplayStart + this._iDisplayLength, this._iRecordsDisplay) : this._iDisplayEnd
		},
		oInstance: null,
		sInstance: null,
		iTabIndex: 0,
		nScrollHead: null,
		nScrollFoot: null
	};
	j.ext = i.extend(!0, {}, j.models.ext);
	i.extend(j.ext.oStdClasses, {
		sTable: "dataTable",
		sPagePrevEnabled: "paginate_enabled_previous",
		sPagePrevDisabled: "paginate_disabled_previous",
		sPageNextEnabled: "paginate_enabled_next",
		sPageNextDisabled: "paginate_disabled_next",
		sPageJUINext: "",
		sPageJUIPrev: "",
		sPageButton: "paginate_button",
		sPageButtonActive: "paginate_active",
		sPageButtonStaticDisabled: "paginate_button paginate_button_disabled",
		sPageFirst: "first",
		sPagePrevious: "previous",
		sPageNext: "next",
		sPageLast: "last",
		sStripeOdd: "odd",
		sStripeEven: "even",
		sRowEmpty: "dataTables_empty",
		sWrapper: "dataTables_wrapper",
		sFilter: "dataTables_filter",
		sInfo: "dataTables_info",
		sPaging: "dataTables_paginate paging_",
		sLength: "dataTables_length",
		sProcessing: "dataTables_processing",
		sSortAsc: "sorting_asc",
		sSortDesc: "sorting_desc",
		sSortable: "sorting",
		sSortableAsc: "sorting_asc_disabled",
		sSortableDesc: "sorting_desc_disabled",
		sSortableNone: "sorting_disabled",
		sSortColumn: "sorting_",
		sSortJUIAsc: "",
		sSortJUIDesc: "",
		sSortJUI: "",
		sSortJUIAscAllowed: "",
		sSortJUIDescAllowed: "",
		sSortJUIWrapper: "",
		sSortIcon: "",
		sScrollWrapper: "dataTables_scroll",
		sScrollHead: "dataTables_scrollHead",
		sScrollHeadInner: "dataTables_scrollHeadInner",
		sScrollBody: "dataTables_scrollBody",
		sScrollFoot: "dataTables_scrollFoot",
		sScrollFootInner: "dataTables_scrollFootInner",
		sFooterTH: "",
		sJUIHeader: "",
		sJUIFooter: ""
	});
	i.extend(j.ext.oJUIClasses, j.ext.oStdClasses, {
		sPagePrevEnabled: "fg-button ui-button ui-state-default ui-corner-left",
		sPagePrevDisabled: "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
		sPageNextEnabled: "fg-button ui-button ui-state-default ui-corner-right",
		sPageNextDisabled: "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
		sPageJUINext: "ui-icon ui-icon-circle-arrow-e",
		sPageJUIPrev: "ui-icon ui-icon-circle-arrow-w",
		sPageButton: "fg-button ui-button ui-state-default",
		sPageButtonActive: "fg-button ui-button ui-state-default ui-state-disabled",
		sPageButtonStaticDisabled: "fg-button ui-button ui-state-default ui-state-disabled",
		sPageFirst: "first ui-corner-tl ui-corner-bl",
		sPageLast: "last ui-corner-tr ui-corner-br",
		sPaging: "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",
		sSortAsc: "ui-state-default",
		sSortDesc: "ui-state-default",
		sSortable: "ui-state-default",
		sSortableAsc: "ui-state-default",
		sSortableDesc: "ui-state-default",
		sSortableNone: "ui-state-default",
		sSortJUIAsc: "css_right ui-icon ui-icon-triangle-1-n",
		sSortJUIDesc: "css_right ui-icon ui-icon-triangle-1-s",
		sSortJUI: "css_right ui-icon ui-icon-carat-2-n-s",
		sSortJUIAscAllowed: "css_right ui-icon ui-icon-carat-1-n",
		sSortJUIDescAllowed: "css_right ui-icon ui-icon-carat-1-s",
		sSortJUIWrapper: "DataTables_sort_wrapper",
		sSortIcon: "DataTables_sort_icon",
		sScrollHead: "dataTables_scrollHead ui-state-default",
		sScrollFoot: "dataTables_scrollFoot ui-state-default",
		sFooterTH: "ui-state-default",
		sJUIHeader: "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",
		sJUIFooter: "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"
	});
	i.extend(j.ext.oPagination, {
		two_button: {
			fnInit: function(e, j, n) {
				var k = e.oLanguage.oPaginate,
					l = function(i) {
						e.oApi._fnPageChange(e, i.data.action) && n(e)
					},
					k = !e.bJUI ? '<a class="' + e.oClasses.sPagePrevDisabled + '" tabindex="' + e.iTabIndex + '" role="button">' + k.sPrevious + '</a><a class="' + e.oClasses.sPageNextDisabled + '" tabindex="' + e.iTabIndex + '" role="button">' + k.sNext + "</a>" : '<a class="' + e.oClasses.sPagePrevDisabled + '" tabindex="' + e.iTabIndex + '" role="button"><span class="' + e.oClasses.sPageJUIPrev + '"></span></a><a class="' + e.oClasses.sPageNextDisabled + '" tabindex="' + e.iTabIndex + '" role="button"><span class="' + e.oClasses.sPageJUINext + '"></span></a>';
				i(j).append(k);
				var t = i("a", j),
					k = t[0],
					t = t[1];
				e.oApi._fnBindAction(k, {
					action: "previous"
				}, l);
				e.oApi._fnBindAction(t, {
					action: "next"
				}, l);
				e.aanFeatures.p || (j.id = e.sTableId + "_paginate", k.id = e.sTableId + "_previous", t.id = e.sTableId + "_next", k.setAttribute("aria-controls", e.sTableId), t.setAttribute("aria-controls", e.sTableId))
			},
			fnUpdate: function(e) {
				if (e.aanFeatures.p) for (var i = e.oClasses, j = e.aanFeatures.p, k = 0, n = j.length; k < n; k++) 0 !== j[k].childNodes.length && (j[k].childNodes[0].className = 0 === e._iDisplayStart ? i.sPagePrevDisabled : i.sPagePrevEnabled, j[k].childNodes[1].className = e.fnDisplayEnd() == e.fnRecordsDisplay() ? i.sPageNextDisabled : i.sPageNextEnabled)
			}
		},
		iFullNumbersShowPages: 5,
		full_numbers: {
			fnInit: function(e, j, n) {
				var k = e.oLanguage.oPaginate,
					l = e.oClasses,
					t = function(i) {
						e.oApi._fnPageChange(e, i.data.action) && n(e)
					};
				i(j).append('<a  tabindex="' + e.iTabIndex + '" class="' + l.sPageButton + " " + l.sPageFirst + '">' + k.sFirst + '</a><a  tabindex="' + e.iTabIndex + '" class="' + l.sPageButton + " " + l.sPagePrevious + '">' + k.sPrevious + '</a><span></span><a tabindex="' + e.iTabIndex + '" class="' + l.sPageButton + " " + l.sPageNext + '">' + k.sNext + '</a><a tabindex="' + e.iTabIndex + '" class="' + l.sPageButton + " " + l.sPageLast + '">' + k.sLast + "</a>");
				var v = i("a", j),
					k = v[0],
					l = v[1],
					z = v[2],
					v = v[3];
				e.oApi._fnBindAction(k, {
					action: "first"
				}, t);
				e.oApi._fnBindAction(l, {
					action: "previous"
				}, t);
				e.oApi._fnBindAction(z, {
					action: "next"
				}, t);
				e.oApi._fnBindAction(v, {
					action: "last"
				}, t);
				e.aanFeatures.p || (j.id = e.sTableId + "_paginate", k.id = e.sTableId + "_first", l.id = e.sTableId + "_previous", z.id = e.sTableId + "_next", v.id = e.sTableId + "_last")
			},
			fnUpdate: function(e, o) {
				if (e.aanFeatures.p) {
					var l = j.ext.oPagination.iFullNumbersShowPages,
						k = Math.floor(l / 2),
						n = Math.ceil(e.fnRecordsDisplay() / e._iDisplayLength),
						t = Math.ceil(e._iDisplayStart / e._iDisplayLength) + 1,
						v = "",
						z, D = e.oClasses,
						x, J = e.aanFeatures.p,
						H = function(i) {
							e.oApi._fnBindAction(this, {
								page: i + z - 1
							}, function(i) {
								e.oApi._fnPageChange(e, i.data.page);
								o(e);
								i.preventDefault()
							})
						}; - 1 === e._iDisplayLength ? t = k = z = 1 : n < l ? (z = 1, k = n) : t <= k ? (z = 1, k = l) : t >= n - k ? (z = n - l + 1, k = n) : (z = t - Math.ceil(l / 2) + 1, k = z + l - 1);
					for (l = z; l <= k; l++) v += t !== l ? '<a tabindex="' + e.iTabIndex + '" class="' + D.sPageButton + '">' + e.fnFormatNumber(l) + "</a>" : '<a tabindex="' + e.iTabIndex + '" class="' + D.sPageButtonActive + '">' + e.fnFormatNumber(l) + "</a>";
					l = 0;
					for (k = J.length; l < k; l++) 0 !== J[l].childNodes.length && (i("span:eq(0)", J[l]).html(v).children("a").each(H), x = J[l].getElementsByTagName("a"), x = [x[0], x[1], x[x.length - 2], x[x.length - 1]], i(x).removeClass(D.sPageButton + " " + D.sPageButtonActive + " " + D.sPageButtonStaticDisabled), i([x[0], x[1]]).addClass(1 == t ? D.sPageButtonStaticDisabled : D.sPageButton), i([x[2], x[3]]).addClass(0 === n || t === n || -1 === e._iDisplayLength ? D.sPageButtonStaticDisabled : D.sPageButton))
				}
			}
		}
	});
	i.extend(j.ext.oSort, {
		"string-pre": function(e) {
			"string" != typeof e && (e = null !== e && e.toString ? e.toString() : "");
			return e.toLowerCase()
		},
		"string-asc": function(e, i) {
			return e < i ? -1 : e > i ? 1 : 0
		},
		"string-desc": function(e, i) {
			return e < i ? 1 : e > i ? -1 : 0
		},
		"html-pre": function(e) {
			return e.replace(/<.*?>/g, "").toLowerCase()
		},
		"html-asc": function(e, i) {
			return e < i ? -1 : e > i ? 1 : 0
		},
		"html-desc": function(e, i) {
			return e < i ? 1 : e > i ? -1 : 0
		},
		"date-pre": function(e) {
			e = Date.parse(e);
			if (isNaN(e) || "" === e) e = Date.parse("01/01/1970 00:00:00");
			return e
		},
		"date-asc": function(e, i) {
			return e - i
		},
		"date-desc": function(e, i) {
			return i - e
		},
		"numeric-pre": function(e) {
			return "-" == e || "" === e ? 0 : 1 * e
		},
		"numeric-asc": function(e, i) {
			return e - i
		},
		"numeric-desc": function(e, i) {
			return i - e
		}
	});
	i.extend(j.ext.aTypes, [function(e) {
		if ("number" === typeof e) return "numeric";
		if ("string" !== typeof e) return null;
		var i, j = !1;
		i = e.charAt(0);
		if (-1 == "0123456789-".indexOf(i)) return null;
		for (var k = 1; k < e.length; k++) {
			i = e.charAt(k);
			if (-1 == "0123456789.".indexOf(i)) return null;
			if ("." == i) {
				if (j) return null;
				j = !0
			}
		}
		return "numeric"
	}, function(e) {
		var i = Date.parse(e);
		return null !== i && !isNaN(i) || "string" === typeof e && 0 === e.length ? "date" : null
	}, function(e) {
		return "string" === typeof e && -1 != e.indexOf("<") && -1 != e.indexOf(">") ? "html" : null
	}]);
	i.fn.DataTable = j;
	i.fn.dataTable = j;
	i.fn.dataTableSettings = j.settings;
	i.fn.dataTableExt = j.ext
})(jQuery, window, document, void 0);